
[英]How can I run my hide/show columns script on multiple ranges of columns in one google sheets spreadsheet?
[英]How do I run a Google Apps script on all sheets in my spreadsheet file?
问题:
我见过类似的问题和解决方案,但只能让我的脚本在电子表格文件的第一个工作表上运行。 我已经修改了代码,只在特定的工作表上应用,但也许我在这样做时错过了一些东西..
编码:
/**
* 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
在第一个 for 循环中被第二个 for 循环改变。 这样,使用i
的循环无法按您的预期正常工作。 我认为这就是你的问题的原因。var sheet = ss.getSheets()[i];
可以修改为var sheet = sheets[i];
. 这样,可以稍微降低工艺成本。当你的脚本被修改时,它变成如下。
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")
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.