#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);
}