Google Apps Script setValue() И setBackgroundRGB() для одной и той же ячейки

#google-apps-script #google-sheets #setvalue #setbackground

#google-apps-script #google-sheets #setvalue #setbackground

Вопрос:

Я пытаюсь использовать методы setValue и setBackgroundRGB вместе для одной и той же ячейки, но это не работает. На самом деле работает только setValue . Я попробовал 3 разных способа выполнения следующего условия if-else, но всегда вижу только число без каких-либо изменений цвета фона. Если я удалю число, только тогда я увижу цвет. Возможно ли иметь оба для одной и той же ячейки?

(Кроме того, есть ли способ работать в определенных столбцах без использования активной ячейки?)

 function onEdit(e) {
  var active_cell = e.range;
  var active_column = active_cell.getColumn();

      if(active_sheet.getName().startsWith("202")){
        var in_row= 5;
        var exp_row= 6;
        var diff_row = 7;
    
        var income = active_sheet.getRange(in_row,active_column).getValue();
        var expenses = active_sheet.getRange(exp_row,active_column).getValue();
        var diff = income - expenses;
    
        if (active_column >= 2){
          if(income > expenses) {
            active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0).setValue(diff);
          } else if (income == expenses) {
            active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
          } else {
            active_sheet.getRange(diff_row,active_column).setValue(diff);
            active_sheet.getRange(diff_row,active_column).set.setBackgroundRGB(255,0,0);
          }
        }
     }

}
 

Ответ №1:

active_sheet не определено в вашем коде, Range.setBackgroundRGB() и Range.setValue() работают должным образом в любой из ваших комбинаций.

Обновленный код:

 function onEdit(e) {
  var active_sheet = e.source.getActiveSheet();
  var active_cell = e.range;
  var active_column = active_cell.getColumn();

      if(active_sheet.getName().startsWith("202")){
        var in_row= 5;
        var exp_row= 6;
        var diff_row = 7;
    
        var income = active_sheet.getRange(in_row,active_column).getValue();
        var expenses = active_sheet.getRange(exp_row,active_column).getValue();
        var diff = income - expenses;
    
        if (active_column >= 2){
          if(income > expenses) {
            active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0).setValue(diff);
          } else if (income == expenses) {
            active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
          } else {
            active_sheet.getRange(diff_row,active_column).setValue(diff);
            active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0);
          }
        }
     }

}
 

Вывод:

введите описание изображения здесь


Что касается вашего другого вопроса: есть ли способ работать в определенных столбцах без использования активной ячейки?

  • Да, вы можете выбрать определенный столбец в качестве своего диапазона, не используя индекс столбца активной ячейки. Вам просто нужно указать жестко заданный индекс столбца при выборе диапазона с помощью Sheet.getRange(строка, столбец).

Пример:

 var income = active_sheet.getRange(in_row,4).getValue();
 
  • Здесь я получу доступ к ячейке в столбце D (который находится в индексе 4).

Комментарии:

1. Спасибо! Произошло что-то странное. Мне пришлось «очистить форматирование» в ячейке, с которой я работал, чтобы также увидеть цвет!