【发布时间】:2021-01-13 00:30:32
【问题描述】:
我有一个使用滚动日历跟踪出勤情况的 Google 表格。它有多个工作表,我希望每个工作表都具有相同的条件格式。最初这似乎很容易,我编写了一些脚本,让它遍历所有工作表,以将一个单元格中的格式复制到整个工作表。它运行良好,直到它以某种方式删除了除 =A$1=TODAY() 之外的所有条件格式。我一直在试图确定它为什么这样做以及如何解决它。我尝试在非移动单元格 (A1) 中设置条件格式,但随后公式无法正常工作。他们最终突出显示了错误的行。我也一直在查看 Google Sheets API Sheets,但是在实现它时遇到了麻烦。有没有办法可以编写脚本来设置这些条件格式规则以及如何设置?任何帮助表示赞赏。
我已经提供了我想要完成的工作以及我一直在使用的脚本和参考的图片,所有这些都在下面。
工作表的基本布局如图所示。图片还描述了我尝试使用条件格式完成的工作。
格式化规则如下(并按此顺序):
-
适用范围:A1:NH(整张)
自定义公式为:=A$1=TODAY()
背景颜色:默认绿色背景 (#b7e1cd) -
应用于范围:C2:NH(除第 1 行和 A 列和 B 列之外的所有内容)
自定义公式为:=$B2>=10
背景颜色:深红色 1 (#cc0000) -
适用于范围:C2:NH
自定义公式为:=$B2>=8
背景颜色:浅红色 2 (#ea9999) -
适用于范围:C2:NH
自定义公式为:=$B2>=5
背景颜色:浅橙色 1 (#f6b26b) -
适用于范围:C2:NH
自定义公式为:=$B2>=2
背景颜色:浅黄色 2 (#ffe599)
B 列中的公式是 =SUM($C2:2) 自动填充到每一行。
我当前的脚本是
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheets();
var sheetNames = [ 'Screening','Maint - PrePress','Vulcan','Sullivan','Packing','Materials','Shipping','Labels','Embroidery','PadPrint','Quality'];
sh.forEach(sheet=> {
if(sheetNames.includes(sheet.getName())) {
var rng = sheet.getRange('F2');
rng.copyFormatToRange(sheet, 3, sheet.getLastColumn(), 2, sheet.getLastRow());
}
});
}
参考资料:
【问题讨论】:
-
您能否提供一份您正在处理的电子表格的经过清理的副本(不仅仅是屏幕截图),清楚地显示所需的结果?
-
@lamblichus 这里是链接:docs.google.com/spreadsheets/d/…
-
那么,您的问题是如何以编程方式应用上述条件格式?
-
是的,我想每编辑 10 次工作表。目的是防止人们永久更改它们,从而导致错误。还可以修复添加行或列时出现的错误,因为 google 表格会围绕这些调整条件格式,并且不包含它们。
-
我看到你得到了基于在范围之间复制格式的答案。另一种方法是通过脚本从头开始创建格式规则(而不是从其他范围复制它们)。你认为那会更可取吗?如果是这样的话,我会考虑用这个发布答案。
标签: google-apps-script google-sheets google-sheets-api conditional-formatting