【问题标题】:Looping a script through ALL sheets在所有工作表中循环脚本
【发布时间】:2021-11-28 14:07:41
【问题描述】:

我有一个在工作表上运行的简单脚本。但是,我将来会在电子表格中添加更多工作表,并希望针对所有工作表运行脚本。

所以目前我需要为每张纸设置一个单独的函数。在该函数中,我使 sheet1 处于活动状态,并具有一个单独的函数,该函数与 sheet 2 、3 、4 等具有相同的功能。但是,这似乎不是一个非常优雅的解决方案并且不容易维护。

有谁知道我可以如何创建一个简单的循环,它会检测电子表格中的工作表数量,然后为每个工作表运行我的脚本。供参考,下面是 mny 完整脚本,目前已为 sheet2 编写。

非常感谢大家

function pricesearchsheet2() {
  
  
  var date = new Date();
  var currenthour = date.getHours();
  var currentmonth = date.getMonth();
  var sheetrow = 1
  var targetcell = 1

// set the target cell based on the current hour of the day
  if (currenthour == 0) {
  var targetcell = "B6";
}
if (currenthour == 1) {
  var targetcell = "C6";
}
if (currenthour == 2) {
  var targetcell = "D6";
}
if (currenthour == 3) {
  var targetcell = "E6";
}
if (currenthour == 4) {
  var targetcell = "F6";
}
if (currenthour == 5) {
  var targetcell = "G6";
}
if (currenthour == 6) {
  var targetcell = "H6";
}
if (currenthour == 7) {
  var targetcell = "I6";
}
if (currenthour == 8) {
  var targetcell = "J6";
}
if (currenthour == 9) {
  var targetcell = "K6";
}
if (currenthour == 10) {
  var targetcell = "L6";
}
if (currenthour == 11) {
  var targetcell = "M6";
}
if (currenthour == 12) {
  var targetcell = "N6";
}
if (currenthour == 13) {
  var targetcell = "O6";
}
if (currenthour == 14) {
  var targetcell = "P6";
}
if (currenthour == 15) {
  var targetcell = "Q6";
}
if (currenthour == 16) {
  var targetcell = "R6";
}
if (currenthour == 17) {
  var targetcell = "S6";
}
if (currenthour == 18) {
  var targetcell = "T6";
}
if (currenthour == 19) {
  var targetcell = "U6";
}
if (currenthour == 20) {
  var targetcell = "V6";
}
if (currenthour == 21) {
  var targetcell = "W6";
}
if (currenthour == 22) {
  var targetcell = "X6";
}
if (currenthour == 23) {
  var targetcell = "Y6";
}
if (currenthour == 24) {
  var targetcell = "Z6";
}

SpreadsheetApp.getActive().getSheetByName("Sheet2");
// Capture the data from FUTBIN according to the URL set in cell A1
  SpreadsheetApp.getActive().getRange(targetcell).setValue('=--SPLIT(REGEXEXTRACT(JOIN(",", IMPORTDATA(B1)),"LCPrice"":""(.*)"), CHAR(34))')
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    类似这样的:

    ...
    
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    
    for (var sheet of sheets) {
    
      sheet.getRange(targetcell)
        .setValue('=--SPLIT(REGEXEXTRACT(JOIN(",",IMPORTDATA(B1)),"LCPrice"":""(.*)"), CHAR(34))')
    
    }
    

    可能所有的脚本都可以归结为:

    function pricesearchsheet2() {
    
        var date = new Date();
        var currenthour = date.getHours();
        var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    
        for (var sheet of sheets) {
            sheet.getRange(6, currenthour + 2)
                .setValue('=--SPLIT(REGEXEXTRACT(JOIN(",",IMPORTDATA(B1)),"LCPrice"":""(.*)"), CHAR(34))')
        }
    }
    

    (6, currenthour + 2) 在第 0 小时为您提供 B6,在第 1 小时为您提供 C6,在第 2 小时为您提供 D6,等等...

    【讨论】:

    【解决方案2】:

    您可以将代码包含在 for 循环中,并遍历工作表:

    // RETRIEVE SHEET NAMES
    let ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheets = ss.getSheets();
    
    // ITERATE THROUGH SHEETS
    for (let item in sheets) {
        let sheetName = sheets[item].getSheetName();
        //
        // Your code here
        // ... 
        // ss.getSheetByName(sheetName);
        // ...
        //
    }
    

    另外,为了它的价值,你可以使用 switch/case 语句来代替这么多的 if 语句。

    【讨论】:

    • 谢谢。刚刚尝试过,它确实执行了......但是当我运行它时,只有工作表 1 被编辑。如果我第二次运行它,它会执行 sheet2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2014-09-15
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多