【问题标题】:Change cell value based on the cell's background color in Google Sheets根据 Google 表格中单元格的背景颜色更改单元格值
【发布时间】:2021-03-23 18:44:33
【问题描述】:
在 Google 表格中,我想根据单元格的背景颜色更改单元格值(在本例中是添加文本)。例如,如果单元格的背景颜色为绿色(#62a84f),如附图所示,我想在单元格中自动插入文本“g”。
Please see the picture
我找到了以下脚本,但无法弄清楚如何让它工作:
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
}
}
}
*很少的背景信息 - 我在一所小学工作,我们每周都会评估学生的进步,让我们可以节省大量工作来编写这个脚本。
【问题讨论】:
标签:
google-apps-script
google-sheets
【解决方案1】:
解释:
虽然这可能不是问题,但您选择的颜色 "#62a84f" 不是颜色选择器菜单中的默认颜色之一。为了测试下面的代码,我使用了默认的#34a853:
但是,如果您确定您的颜色确实是 "#62a84f",那么请继续使用它并将我的代码的相关部分更改为您的情况。
我使用双 map 来迭代 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);
}