0

Я пытаюсь создать скрипт Google Apps, который позволит мне быстро определить, нужны ли дальнейшие действия, изменяя цвет ячейки. В настоящее время я выполняю процесс аудита, когда я смотрю на 5% продукта на ошибки. Если найдено слишком много ошибок, мне нужно посмотреть 100% продукта.Условно форматирование электронных таблиц

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

  • Если a1 меньше или равно 50 и b1 меньше, то четыре цвета ячейки c1 зеленый
  • Если a1 меньше или равно 50 и b1 больше, то четыре цвета ячейки c1 красный
  • Если a1 больше или равно 50, а b1 меньше 4% a1, тогда цветная ячейка c1 зеленая
  • Если a1 больше или равно 50, а b1 больше 4% от a1, тогда цветная ячейка c1 красная

Любая помощь очень ценится!


function onEdit(e) { 
    var ss = e.source.getActiveSheet(); 
    var r = e.source.getActiveRange(); 
    if (r.getRow() != 1 && ss.getName() == "Entry Form") { 
    Error_Count = ss.getRange(r.getRow(),3).getValue(); 
    rowRange = ss.getRange(r.getRow(),1,1,3); 

    if (Error_Count < 3.8) { 
     rowRange.setBackgroundColor("#FF0000"); } 
    else if (Error_Count == 'N/A') { 
     rowRange.setBackgroundColor("#ffffff"); } 
    else if (Error_Count > 3.9) { 
     rowRange.setBackgroundColor("#ffffff"); 
    } 
+0

Я обновил свой ответ с лучшей идеей, где вы должны быть с этим кодом. Я также включил комментарии, чтобы вы могли понять, что происходит. Однако ваши столбцы A-C в вашей таблице не имеют числовых значений ... поэтому я не знаю, как вы планируете проводить сравнения. –

ответ

0

Ну вы упоминаете "будущее расширение", но получение "a1", "b1" и "c1", в частности, не очень расширяемая.

Мое предложение было бы следующее:

  1. Используйте Sheet class, чтобы получить "a1: c100" (столбцы -с 100 строк). Или, возможно, используйте getLastRow() из Sheet class, а затем используйте getRange(1, 1, lastRow, 3), чтобы у вас были столбцы a-c со всеми строками, в которых есть данные (на мой взгляд, лучшая идея).
    • Теперь у вас есть Range
  2. Получить значения этого диапазона с помощью функции getValues. Это возвращает матрицу.
  3. Поскольку ваши значения находятся в матрице, a1 будет по существу values[0][0]. b1 будет values[0][1], и c1 будет values[0][2].
  4. Вы можете легко перебрать каждую «строку» значений, как:

    for (var i = 0; i < values.length; i ++) { 
    // do your comparisons for each row. 
    // row[0] is "a_rowNumber", row[1] is "b_rowNumber", etc. 
    var row = values[i]; 
    
  5. Теперь вы можете сделать ваши сравнения (которые чисто математические, я думаю, что я оставлю их вам)

  6. Если сравнение, как:

    if (row[0] > 50 && row[1] < 4) 
    

    истинно, вы можете использовать функцию getRange() снова нравится:

    getRange(i + 1, 3) 
    

    Запомнить я это строка, и 3 Колонка C: добавить 1 к строке, потому что ваш массив начинается с индекса 0, но фактическое число строк в электронной таблице (используется getRange() начала в 1.

  7. Как только у вас есть этот диапазон (который является одной ячейкой в ​​этой точке), вы хотите покрасить в столбце c, используйте Range.setBackgroundColor(). На самом деле есть много способов установить цвет фона, используя RGB, шестнадцатеричные значения цвета или простые значения цвета, такие как «красный». Выбирайте!

Редактировать: Вот пример того, как можно получить доступ к данным вы хотите, и как использовать его:

function onEdit(e) { 
    // Get the variable "sheet" so that we can get more ranges and set colors later 
    var sheet = e.source.getActiveSheet(); 
    // Get the edited cell so we can look at the current row 
    var cell = e.source.getActiveRange(); 
    // Get the current row (which is the same row where the cell was edited) 
    var editedRow = cell.getRow(); 

    if (cell.getRow() != 1 && sheet.getName() == "Entry Form") { 
    // Get the actual values in that row (the ones we want to use, which are columns A-C) 
    var rowValues = sheet.getRange(editedRow, 1, 1, 3).getValues(); 

    // Your first condition is met: get the current row, column 3 (current row, C), set background color 
    if (rowValues[0] <= 50 && rowValues[1] < 4) sheet.getRange(editedRow, 3).setBackgroundColor("green"); 
    // Your second condition is met: get the current row, column 3 (current row, C), set background color 
    else if (rowValues[0] <= 50 && rowValues[1] > 4) sheet.getRange(editedRow, 3).setBackgroundColor("green"); 
    // Your third condition is met: get the current row, column 3 (current row, C), set background color 
    else if (rowValues[0] >= 50 && (rowValues[1] < .04 * rowValues[0])) sheet.getRange(editedRow, 3).setBackgroundColor("green"); 
    // Your fourth condition is met: get the current row, column 3 (current row, C), set background color 
    else if (rowValues[0] >= 50 && (rowValues[1] >= .04 * rowValues[0])) sheet.getRange(editedRow, 3).setBackgroundColor("green"); 
    } 
} 
+0

Так что я думаю, что это шаг в правильном направлении, но я думаю, что я был недостаточно ясен. Ниже приведен пример [google doc] (https://docs.google.com/spreadsheet/ccc?key=0AqtCuK7ex8ZNdHFXbzhwN2I5LVNMMllzODdsQ2NyU0E#gid=0). Общее количество элементов не изменяется и число ошибок изменяется на основе записей, добавленных в b4-е. Я пытался манипулировать тем, что вы предлагали, но не добился успеха. Я ценю вашу помощь заранее. – user3010364

+0

Если вы попытались использовать какие шаги я вам дал, пожалуйста, разместите код, чтобы я мог помочь вам найти ошибку. Logger и/или Execution Transcript из редактора скриптов также помогли бы :) –

+0

Я добавил то, что у меня есть, но я продолжаю получать синтаксическую ошибку. user3010364

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