我一直试图完成仅在某些工作表选项卡上运行此边框脚本的操作,但在所有这些选项卡上调用此操作均未成功。工作表标签如下。当前销售,待处理订单,转包订单,部分发货,报价,存档销售。
function setborders() {
var menu = [{name: "Borders for nonempty cells", functionName: "borders"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Set Borders", menu);
}
function borders() {
var ss = SpreadsheetApp.getActive();
var numsheets = ss.getNumSheets();
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]
var range = sheet.getRange("A2:V1000");
var values = range.getValues();
var offsetRow = range.getRowIndex();
for(var i = 0; i < allsheets.length; i++)
if(['Current Sales','Pending Orders','Subcontract Orders','Partial Shipped','Quotes','Archived Sales'].indexOf(allsheets[i].getName())){
if(sheet.getRange(range.getRow(), 1).getValue()) {
range.setBorder(false, false, false, false, false, false);
SpreadsheetApp.flush();
for (var i = 0; i < values.length; i++) {
if (values[i][0]) { // Only for non-empty A column cells
sheet.getRange("A" + (i + offsetRow) + ":V" + (i + offsetRow)).setBorder(true, true, true, true, false, false, "black",SpreadsheetApp.BorderStyle.SOLID);
}
}
for (i = 0; i < values.length; i++) {
if (values[i][0] && values[i][14]) {
sheet.getRange("O" + (i + offsetRow) + ":O" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black",SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
for (i = 0; i < values.length; i++) {
if (values[i][0] && values[i][18]) {
sheet.getRange("S" + (i + offsetRow) + ":S" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black",SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
for (i = 0; i < values.length; i++) {
if (values[i][0] && values[i][19]) {
sheet.getRange("T" + (i + offsetRow) + ":T" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black",SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
for (i = 0; i < values.length; i++) {
if (values[i][0] && values[i][20]) {
sheet.getRange("U" + (i + offsetRow) + ":U" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black",SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
for (i = 0; i < values.length; i++) {
if (values[i][0] && values[i][21]) {
sheet.getRange("V" + (i + offsetRow) + ":V" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black",SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
}
}
}
}
答案 0 :(得分:2)
“修复”不起作用,因为代码嵌套了for
,两者都遍历了所有工作表。内部为建议条件,外部为没有条件。
要将执行代码的某些部分限制为特定电子表格,您可以使用类表的getName()
方法,并将其与有效表的列表进行比较。一种方法是创建一个使用indexOf
的有效工作表名称的数组。
假设有效的工作表名称为Sheet1和Sheet3,并且sheets
是var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
之类的所有工作表的集合),那么下面的代码将遍历所有工作表,但只执行有效工作表中的一部分代码:
for(var i = 0; i < sheets.length; i++)
if(['Sheet1','Sheet3'].indexOf(sheets[i].getName())){
//Add here the code to be executed on the valid sheets
}
}