我为 Google 电子表格编写了一个脚本,该脚本将背景复制到一列中,并将相同的背景设置到 Q3:AB 列。但是,背景是单独设置到每一列的。请参阅下面的脚本:
function setBackgrounds(event) {
var sheet = event.source.getActiveSheet();
var range = event.range;
// Check if the changed range is in Column B
if (range.getColumn() == 2 && range.getSheet().getName() == "Sheet1") {
var sourceColumn = sheet.getRange("B3:B");
// Copy backrounds in Column B to target ranges
var sourceBackgrounds = sourceColumn.getBackgrounds();
sheet.getRange("Q3:Q").setBackgrounds(sourceBackgrounds);
sheet.getRange("R3:R").setBackgrounds(sourceBackgrounds);
sheet.getRange("S3:S").setBackgrounds(sourceBackgrounds);
sheet.getRange("T3:T").setBackgrounds(sourceBackgrounds);
sheet.getRange("U3:U").setBackgrounds(sourceBackgrounds);
sheet.getRange("V3:V").setBackgrounds(sourceBackgrounds);
sheet.getRange("W3:W").setBackgrounds(sourceBackgrounds);
sheet.getRange("X3:X").setBackgrounds(sourceBackgrounds);
sheet.getRange("Y3:Y").setBackgrounds(sourceBackgrounds);
sheet.getRange("Z3:Z").setBackgrounds(sourceBackgrounds);
sheet.getRange("AA3:AA").setBackgrounds(sourceBackgrounds);
sheet.getRange("AB3:AB").setBackgrounds(sourceBackgrounds);
}
}
该脚本可以正常工作并且完全满足需要。但是,为了优化,我尝试通过从范围 B3:3 复制背景并将其设置为范围 Q3:AB (而不是分别到每个范围)与 snippet 来实现此目的sheet.getRange("Q3:AB").setBackgrounds(sourceBackgrounds);
,但出现以下错误:
例外:数据中的列数与范围中的列数不匹配。数据有 1,但范围有 12。在 setBackgrounds(测试:13:29)
当然有一种方法可以优化这个脚本,以便背景一次设置为整个范围?
B3:B 的背景是 1 列的二维数组 [[#somecolor],[#somecolor]....]。
但由于范围 Q3:AB 是 12 列,因此您需要构造一个每行 12 列的数组。下面是将 1 列数组扩展到 12 列的示例。
代码.gs
参考