В 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
}
}
}
*Небольшая справочная информация — я работаю в начальной школе, где мы каждую неделю оцениваем успеваемость наших учеников, и если бы этот сценарий работал, это сэкономило бы нам много работы.
Хотя это может не быть проблемой, выбранный вами цвет "#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);
}