繁体   English   中英

如何在电子表格文件中的所有工作表上运行 Google Apps 脚本?

[英]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.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM