Google apps script 如果在Google工作表中满足条件,则向行添加边框格式
Excel显然有这种类型的条件格式 我想通过Google Sheets实现同样的功能。以下内容应说明之前和之后的情况: 示例数据集Google apps script 如果在Google工作表中满足条件,则向行添加边框格式,google-apps-script,google-sheets,triggers,Google Apps Script,Google Sheets,Triggers,Excel显然有这种类型的条件格式 我想通过Google Sheets实现同样的功能。以下内容应说明之前和之后的情况: 示例数据集 A B C 1 apple Macintosh 2 apple Granny Smith 3 orange Florida 4 orange Valencia 5 pear Garden 6 banana Chiquit
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
---------------------------
结果示例数据集
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,“noorder”,“BORDER”)
=IF(C1=“BORDER”、addBorder(A1:C1)、“NOBORDER”)
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);
}
}
}
函数onEdit(事件){
var sheet=SpreadsheetApp.getActiveSheet();
var范围=事件范围;
var startingRow=range.getRow();
var numRows=range.getNumRows();
对于(var i=1;i而言,在本问答的帮助下,我找到了答案:
此代码测试A列中的值。如果结果为TRUE,则在整行应用边框:
function onOpen() {
GroupMyData(); // trigger this function on sheet opening
}
function GroupMyData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('shared'); // apply to sheet name only
var rows = sheet.getRange('a1:g'); // range to apply formatting to
var numRows = rows.getNumRows(); // no. of rows in the range named above
var values = rows.getValues(); // array of values in the range named above
var testvalues = sheet.getRange('a1:a').getValues(); // array of values to be tested (1st column of the range named above)
rows.setBorder(false, false, false, false, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // remove existing borders before applying rule below
//Logger.log(numRows);
for (var i = 0; i <= numRows - 1; i++) {
var n = i + 1;
//Logger.log(n);
//Logger.log(testvalues[i] > 0);
//Logger.log(testvalues[i]);
if (testvalues[i] > 0) { // test applied to array of values
sheet.getRange('a' + n + ':g' + n).setBorder(null, null, true, null, null, null, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // format if true
}
}
};
函数onOpen(){
GroupMyData();//在打开工作表时触发此函数
}
函数GroupMyData(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName('shared');//仅适用于工作表名称
var rows=sheet.getRange('a1:g');//要应用格式的范围
var numRows=rows.getNumRows();//上述范围内的行数
var values=rows.getValues();//上述范围内的值数组
var testvalues=sheet.getRange('a1:a').getValues();//要测试的值数组(上面指定的范围的第一列)
rows.setboorder(false,false,false,false,false,false,“red”,SpreadsheetApp.BorderStyle.SOLID_MEDIUM);//在应用下面的规则之前删除现有的边框
//Logger.log(numRows);
对于(VarI=0;I0);
//Logger.log(testvalues[i]);
if(testvalues[i]>0){//test应用于值数组
sheet.getRange('a'+n+':g'+n.).setOrder(null,null,true,null,null,null,“红色”,SpreadsheetApp.BorderStyle.SOLID_MEDIUM);//如果为true,则采用格式
}
}
};
我的脚本不值得在这里重复,因为它们是从各种SO答案和API文档中复制的代码片段的混合体。我希望对Google Sheets API更精通的人能够一起制作一些东西。addBorder(A1:C1)
这是一个自定义函数。自定义函数只能返回一个值,不能编辑单元格的属性或编辑其他单元格。谢谢Chris,这实际上给了我一个想法,但如果没有数组,自定义函数似乎无法作用于其他单元格: