2009-06-05 6 views
36

Я ищу способ автоматического изменения цвета минимальной ячейки в строке в электронной таблице google docs.Google Spreadsheet Автоматическая раскраска

Таким образом, за столом, как

1 | 2 | 3 
4 | 2 | 1 
2 | 1 | 6 

Было бы окрасить все ячейки с «1» в них.

+0

Не обязательно связанное с программированием .. – JasonV

+2

Условное форматирование, даже если это выполняется через пользовательский интерфейс, связано с программированием, так как требует анализа проблемы, чтобы определить набор правил таким образом, чтобы компьютер мог выполнять задача. Учитывая это, я считаю, что этот вопрос должен быть вновь открыт. –

+0

Выделите все ячейки и примените собственную формулу: '= и (not (isblank (A1)), A1 = min (1: 1))' – pnuts

ответ

57

В раскрывающемся меню Формат-> Условное форматирование ...

Затем установите свои правила и свой цвет. Вы можете выбрать несколько ячеек и сделать это также.

Edit:

То есть масштабы того, что вы можете сделать с окраской. Вы можете найти сложную формулу, чтобы найти минимальное количество ячеек, а затем, если это соответствует тому, что находится в ячейке, затем покрасьте ее, но вы можете использовать Excel вместо документов Google, если это для вас важная вещь.

+1

ЕСЛИ вы не можете выполнить то, что вам нужно, используя условное форматирование, которое вы всегда можете использовать редактор сценария, чтобы изменить событие onEdit, чтобы проверить ячейку и изменить расцветку в зависимости от любого состояния, которое вы могли себе представить. Нет необходимости (или использования) для Excel. –

+0

Это изменилось с 2015 года, но это действительно помогло мне! Теперь вы можете нажать «Формат» -> «Условное форматирование ...» -> «Цветовая шкала». – PubNub

+0

@ Kekoa Cool, спасибо за обновление. –

26

Хитрость заключается в том, чтобы нажать на курок onEdit событий и добавить интеллект

На первый взгляд, я думал, условное форматирование будет работать, но минимум за рядами немного слишком сложным для стандартного условного форматирования , Это немного сложно понять, но это можно сделать.

Вот полный скрипт (проверено и работает):

function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); 
    var r = s.getActiveRange(); 
    var row = r.getRow(); 
    var cols = s.getDataRange().getNumColumns(); 

    // crate a range for the row using getRange(row, column, numRows, numColumns) 
    var rowRange = s.getRange(row, 1, 1, cols); 
    var rowValues = rowRange.getValues(); 

    // check all the values in the row 
    var val = 999; 
    for(var i = 0; i < cols; i++) { 
    if(val > rowValues[0][i] && rowValues[0][i] !== "") { 
     val = rowValues[0][i]; 
    } 
    } 
    for(var j = 0; j < cols; j++) { 
    if(rowValues[0][j] === val) { 
     s.getRange(row,(j + 1)).setFontColor("blue"); 
    } else { 
     s.getRange(row,(j + 1)).setFontColor("black"); 
    } 
    } 
} 

Сначала касание в обработчик события onEdit для запуска сценария с изменениями электронных таблиц.

function onEdit() 

Признав функцию onEdit, она автоматически узнает, что вы хотите переопределить действие onEdit.

Примечание. Обработчики событий в Документах немного сложны. Поскольку документы могут обрабатывать несколько одновременных изменений несколькими пользователями, обработчики событий обрабатываются на стороне сервера. Основная проблема с этой структурой заключается в том, что при сбое сценария запуска событий он терпит неудачу на сервере. Если вы хотите просмотреть информацию об отладке, вам нужно настроить явный триггер в меню триггеров, который отправляет вам информацию об отладке, когда событие терпит неудачу, иначе он будет терпеть неудачу.

Извлекает номер строки:

var r = s.getActiveRange(); 
    var row = r.getRow(); 

говорит само за себя здесь. Активным диапазоном является редактируемая ячейка.

захватить количество столбцов:

var cols = s.getDataRange().getNumColumns(); 

Вы должны проверить диапазон данных для всей таблицы для этого.

Далее вам необходимо построить ряд данных, содержащий данные для строки в вопросе:

var rowRange = s.getRange(row, 1, 1, cols); 

Читать комментарии в коде, чтобы увидеть, какие значения должны быть.

Затем мы кэшировать результаты тестирования значений:

var rowRange = s.getRange(row, 1, 1, cols); 

Из-за природы Google Docs обратных вызовов сценариев событий запуска на стороне сервера так, чтобы предотвратить злоупотребления, Google ставит ограничения по времени выполнения скрипта. Кэшируя значения, вы сохраняете сервер от много лишних раундов, чтобы получить значения из электронной таблицы.

Следующие две части, где происходит вся магия.

Сначала мы пропустим все ячейки строки, чтобы найти минимальное значение.

var val = 999; 
    for(var i = 0; i < cols; i++) { 
    if(val > rowValues[0][i] && rowValues[0][i] !== "") { 
     val = rowValues[0][i]; 
    } 
    } 

Я установил по умолчанию потолок 999 для простоты. This could be change to a more appropriate value. Фокус в том, чтобы проверить значение против текущего минимума. Если он ниже, то отметьте новое низкое значение.

Вы могли бы легко разрядиться, указав номер ячейки с наименьшим значением и установив его явно, но я хотел рассмотреть случаи, когда несколько ячеек имеют самое низкое значение.

Обработка нескольких ячеек, содержащих минимум требует второго прохода:

for(var j = 0; j < cols; j++) { 
    if(rowValues[0][j] === val) { 
    s.getRange(row,(j + 1)).setFontColor("blue"); 
    } else { 
    s.getRange(row,(j + 1)).setFontColor("black"); 
    } 
} 

Цикла через все ячейки в строке остается тем же самым. На этот раз мы просто проверяем, соответствуют ли значения ячеек выбранному минимуму. Если он совпадает, цвет шрифта меняется на синий. В противном случае цвет шрифта будет изменен на черный.


Это о суммах. Немного сложно привыкнуть к тому, как Google Scripting имеет дело со ссылками на электронные таблицы и ячейки данных, но Doc не так много делает.

Я сделал public link в таблицу, которую я использовал для написания/проверки этого кода. Не стесняйтесь попробовать.

Смежные вопросы