Измените значение ячейки на основе цвета фона ячейки в Google Таблицах

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

В Google Таблицах я хотел бы изменить значение ячейки (в данном случае для добавления текста) на основе цвета фона ячейки. Например, если цвет фона ячейки зеленый (# 62a84f), как на прилагаемом рисунке, я хотел бы автоматически вставить текст «g» в ячейку. Пожалуйста, посмотрите на картинку Я нашел следующий скрипт, но не могу понять, как заставить его работать:

 function myFunction() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Prosinec Leden");

  var data1 = sheet1.getDataRange().getValues();  //2D array of sheet1 cell values
  var bg;

  for(var i=1; i<data1.length; i  )
  {
    bg = sheet1.getRange(?).getBackground();
    if(bg == "#62a84f")  
    {
      sheet1.getRange(?).setValue("x");  //Set value in corresponding row of sheet1
    }    
  }
} 

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

Ответ №1:

Объяснение:

Хотя это может и не быть проблемой, "#62a84f" выбранный вами цвет не является одним из цветов по умолчанию в меню выбора цвета. Чтобы протестировать следующий код, я использовал значение по умолчанию #34a853 :

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

Но если вы уверены, что ваш цвет действительно "#62a84f" такой, тогда продолжайте использовать это и измените соответствующую часть моего кода на ваш случай.


Я использовал двойную карту для перебора каждой ячейки в rng . Чем больше диапазон, тем медленнее производительность кода. Я бы настоятельно посоветовал вам использовать какой-то определенный диапазон, а не весь диапазон данных.

А именно, вы можете захотеть заменить:

const rng = sheet1.getDataRange(); с помощью const rng = sheet1.getRange('B2:D10');

предполагая, что вы хотите проверить наличие зеленых ячеек в диапазоне 'B2:D10' .

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

Решение:

 function myFunction() {
  const sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Prosinec Leden");
  const rng = sheet1.getDataRange();
  const colors = rng.getBackgrounds();
  const values = rng.getValues();
  colors.map((r,i)=>r.map((c,j)=>{
    if(c=='#34a853'){
    values[i][j]="g";
    }}));
  rng.clearContent();
  rng.setValues(values);   
}