代码之家  ›  专栏  ›  技术社区  ›  Umar.H

创建图纸的副本并根据范围命名

  •  0
  • Umar.H  · 技术社区  · 6 年前

    在这里,massive JS noob尝试修改这个脚本来创建一个命名工作表的副本(我将在了解如何添加UI/菜单后将其更改为活动工作表),并循环通过一个范围A2:a,该范围将保存我希望工作表命名的变量。

    这个剧本 从某种意义上说,它确实可以循环并为我创建重复的工作表。我不明白为什么在第22行显示有错误。此外,脚本还复制了“模板表”,这不是一个需要的行为。有人能告诉我为什么会这样吗?干杯伙计们。

       function createEmployeeSheets() {
      var ss        = SpreadsheetApp.getActiveSpreadsheet();
      var employeeID = ss.getSheetByName("EmployeeRef")
    
       // Get the range of cells that store employee data.
      var employeeDataRange = employeeID.getRange("A2:A")
    
      var employeeObjects = employeeDataRange.getValues();
    
      var template = ss.getSheetByName('Template');
    
      for (var i=0; i < employeeObjects.length; i++) {
    
         // Put the sheet you want to create in a variable
         var sheet = ss.getSheetByName(employeeObjects[i]);
    
          // Check if the sheet you want to create already exists. If so,
          // log this and loop back. If not, create the new sheet.
            if (sheet) {
               Logger.log("Sheet " + employeeObjects[i] + "already exists");
            } else {
               template.copyTo(ss).setName(employeeObjects[i]);
               }
            }
      return;
    }
    

    抱歉,我收到的错误信息是:

    The sheet name cannot be empty. (line 32, file "Code"
    

    template.copyTo(ss).setName(employeeObjects[i]);
    

    此外,脚本在EmployeeRef工作表的A2:2上完成itearating之后,它将创建另一个名为Copy of Template的重复工作表。我想要的是复制表的次数,只要名称在A2:A范围内。

    所以,

    Mo
    Jon
    Adelle
    

    干杯!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tanaike    6 年前

    这个答案怎么样?我对你的问题了解如下。

    1. 误差 The sheet name cannot be empty. (line 32, file "Code"
    2. Copy of Template 是创建的。

    我认为你的问题的原因如下。

    问题的原因

    一。误差

    这个错误是由于 null 从单元格的空值。

      • 所以 employeeObjects 包括空行。
    • var sheet = ss.getSheetByName(employeeObjects[i]); if (sheet) {} .
      • employeeObjects[i] 是空的,也就是说 [""] sheet 无效的 . 它是 false 在“如果”。

    2。第页,共页 模板副本 是创建的。

    这个错误是因为 雇员对象 ""

    • 基于以上原因,我们发现 包括空值,如 "" .
    • 在这种情况下,当 template.copyTo(ss).setName(employeeObjects[i]); 是运行的,我想下面的流程会发生。
      1. 复制 template ss . 在这种情况下, 党卫军 是活动的电子表格。
      2. setName(employeeObjects[i]) . 此时,错误发生是因为空值。
        • 什么时候? 模板 模板副本 . 并且由于该错误,不会修改图纸名称。

    结果,这张 模板副本 是创建的。

    我认为为了避免这个错误,有几种方法。所以请把这个修改看作是其中之一。

    修改

    修改点:

    • 从中删除空值 雇员对象 .
    • 从二维数组中检索值。 雇员对象

    修改脚本:

    请修改如下。

    var employeeObjects = employeeDataRange.getValues();
    
    致:
    var employeeObjects = employeeDataRange.getValues().filter(String).map(function(e){return e[0]});
    
    • filter(String) 删除空值。
    • map(function(e){return e[0]}) 将二维数组转换为一维数组。
      • 我用这个来使用“for循环”中的原始脚本。

    参考文献: