如何根据GoogleApps脚本中.getValues()方法的结果将条件格式应用于单元格



我编写此脚本是为了更改一行复选框的格式,该行共有0个选择。在我的数据验证中;true"=1和";false"=0。范围表示为对象[][]。

下面的逻辑决定了哪些行需要格式化,但我如何将格式化实际应用于此行?访问行的格式时遇到问题,因为我正在值级别处理生成的对象[][]。

以下是最终结果:露营装备理货

(我知道可能有一种简单的方法可以通过内置的条件格式来实现这一点,但我只是想在编码方面做得更好(

function updateFormatting() {
var cellValues = SpreadsheetApp.getActiveSheet()
.getRange("C2:I37")
.getValues();
for (let i = 0; i < cellValues.length; i++) {
let rowTotal = 0;
for (let j = 0; j < cellValues[i].length; j++) {
rowTotal += cellValues[i][j];
}
if (rowTotal == 0) {
/* Apply formatting to this row */
}
}
}

感谢您的指导!

我相信您的目标如下。

  • 您想要设置所有列的复选框"的行的背景颜色;C";至";我"未选中
  • 在您的情况下,选中和未选中复选框的值分别为10

修改点:

  • 当选中和未选中复选框的值分别为10时,当这些值由getValues检索时,这些值将作为字符串类型检索。因此,在脚本中,当运行rowTotal += cellValues[i][j];时,这些值将作为字符串添加。请小心
  • 关于/* Apply formatting to this row */,当用于设置单元格格式的脚本被放入循环中时,处理成本将很高

当这些点反映在脚本中时,下面的修改如何?

修改的脚本:

function updateFormatting() {
var sheet = SpreadsheetApp.getActiveSheet();
var cellValues = sheet.getRange("C2:I37").getValues();
var ranges = [];
for (let i = 0; i < cellValues.length; i++) {
let rowTotal = 0;
for (let j = 0; j < cellValues[i].length; j++) {
rowTotal += Number(cellValues[i][j]);
}
if (rowTotal == 0) {
var row = i + 2;
ranges.push(`C${row}:I${row}`);
}
}
sheet.getRangeList(ranges).setBackground("#fce5cd");
}
  • 在这个修改中,范围列表是在一个循环中创建的。并且,它与sheet.getRangeList(ranges).setBackground("#fce5cd")一起使用,并且行的背景色设置为#fce5cd

参考:

  • getRangeList(a1符号(

最新更新