【发布时间】:2018-02-27 04:36:42
【问题描述】:
Excel 显然具有这种类型的条件格式 built-in。
我想通过Google Apps Script 在 Google 表格中完成相同的操作。下面应该演示之前和之后的条件:
示例数据集
A B C
1 apple Macintosh
2 apple Granny Smith
3 orange Florida
4 orange Valencia
5 pear Garden
6 banana Chiquita
生成的示例数据集
A B C
1 apple Macintosh
2 apple Granny Smith
---------------------------
3 orange Florida
4 orange Valencia
---------------------------
5 pear Garden
---------------------------
6 banana Chiquita
---------------------------
此问题的脚本/答案应在第 2、4、5 和 6 行的整行(“A”、“B”和“C”列)下显示底部边框。电子表格逻辑为相当简单:
- 在单元格中
C1,=IF(A1=A2,"NOBORDER","BORDER") - 然后将上面的内容包裹在
=IF(C1="BORDER", addBorder(A1:C1), "NOBORDER")
在更大的数据集中,这种格式将帮助最终用户更轻松地查看逻辑分组。需要 Google Apps 脚本,因为数据会动态更新。
下面是一些示例 Google Apps 脚本代码,但它不起作用
function onEdit(event) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = event.range;
var startingRow = range.getRow();
var numRows = range.getNumRows();
for (var i = 1; i <= numRows; i++) {
var rowNbr = startingRow + i - 1;
Logger.log("changed row %s",rowNbr );
//Now check the WHOLE row
var colLeft=1; //1=A
var colRight=11; //11=K
var row = sheet.getRange(rowNbr,colLeft, 1, colRight - colLeft + 1);
if(row.isBlank()) {
row.setBorder(false, null, true, null, null, null, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
} else {
row.setBorder(false, null, null, null, null, null, "black", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
}
}
}
【问题讨论】:
-
我的脚本不值得在这里重复,因为它们是从各种 SO 答案和 API 文档中复制的代码 sn-ps 的混合体。我希望更精通 Google Sheets API 的人可以一起做一些事情。
-
addBorder(A1:C1)这是一个自定义函数。自定义函数只能返回一个值,不能编辑单元格的属性,也不能编辑其他单元格。 -
谢谢克里斯,这实际上只是给了我一个想法,但似乎自定义函数无法在没有数组的情况下作用于其他单元格:stackoverflow.com/questions/15933019/…
标签: google-apps-script google-sheets triggers