如何在电子表格文件中的所有工作表上运行谷歌应用程序脚本



问题

我看到过类似的问题和解决方案,但只能让我的脚本在电子表格文件的第一张纸上运行。我已经将代码从只应用于特定的工作表中进行了调整,但也许我在做这件事时遗漏了一些东西。。

代码:

/** 
* Sets background color to strikethrough-formatted cells
*/
function set_color_strikethrough(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i=0; i<sheets.length; i++) {
var sheet = ss.getSheets()[i];  // current sheet
var sheetName = sheet.getName();
console.log("sheetname: ", sheetName);
var lr = sheet.getLastRow()
var lc = sheet.getLastColumn()
var range = sheet.getRange(2,1,lr,lc);
var results = range.getFontLines();
for (var i=0;i<lr;i++) {
for (var j=0;j<lc;j++ ) {
if(results[i][j] == "line-through"){
var color = sheet.getRange(i+2,1,1,lc).setBackground("orange")
}
}
}
}
}

更新(解决方案(

感谢@Tanaike指出i计数器变量被滥用,这是一个被忽视的简单错误。工作代码:

/** 
* Sets background color to strikethrough-formatted cells
*/
function set_color_strikethrough(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (k=0; k<sheets.length; k++) {
var sheet = sheets[k];  // current sheet
var lr = sheet.getLastRow()
var lc = sheet.getLastColumn()
var range = sheet.getRange(2,1,lr,lc);
var results = range.getFontLines();
for (var i=0;i<lr;i++) {
for (var j=0;j<lc;j++ ) {
if(results[i][j] == "line-through"){
var color = sheet.getRange(i+2,1,1,lc).setBackground("orange")
}
}
}
}
}

我想修改如下。

修改要点:

  • 在脚本中,使用i变量的for循环在使用i的for循环中使用。循环的第一个i被循环的第二个改变。这样一来,使用i的循环就不会像您预期的那样正常工作。我认为这就是你问题的原因
  • 可以将CCD_ 6修改为CCD_。通过这种方式,可以稍微降低工艺成本

修改的脚本:

当您的脚本被修改时,它变成如下。

function set_color_strikethrough(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (k=0; k<sheets.length; k++) {  // <--- Modified
var sheet = sheets[k]; // <--- Modified
var sheetName = sheet.getName();
console.log("sheetname: ", sheetName);
var lr = sheet.getLastRow()
var lc = sheet.getLastColumn()
var range = sheet.getRange(2,1,lr,lc);
var results = range.getFontLines();
for (var i=0;i<lr;i++) {
for (var j=0;j<lc;j++ ) {
if(results[i][j] == "line-through"){
var color = sheet.getRange(i+2,1,1,lc).setBackground("orange")
}
}
}
}
}

最新更新