大量JS新手在这里,尝试修改此脚本以创建命名工作表的重复项(在弄清楚如何添加UI /菜单后,我将其更改为活动工作表)并遍历范围A2:A包含我想要命名工作表的变量。
此脚本 sort 可以正常工作,从某种意义上说,它确实循环并为我创建了重复的工作表。我不知道为什么在第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上完成了迭代之后,它还会创建另一个重复的工作表,称为“模板复制”。我想要的是将工作表重复多少次,就像A2:A范围内的名字一样。
所以
Mo
Jon
Adelle
只会生成三张纸,但是我得到3 + 1,其中+1被称为模板纸的副本。
干杯!
答案 0 :(得分:1)
这个答案怎么样?我对您的问题了解如下。
The sheet name cannot be empty. (line 32, file "Code"
。Copy of Template
表。我认为您遇到问题的原因如下。
The sheet name cannot be empty. (line 32, file "Code"
此错误是由于单元格的空值中的null
造成的。
employeeObjects
包含空行。var sheet = ss.getSheetByName(employeeObjects[i]);
和if (sheet) {}
判断工作表的存在。
employeeObjects[i]
为空时,即[""]
,sheet
为null
。 false
位于“ if”。结果,通过尝试使用空值修改工作表名称,会发生此类错误。
Copy of Template
表已创建。此错误是由于employeeObjects[i]
是""
。
employeeObjects
包含""
之类的空值。template.copyTo(ss).setName(employeeObjects[i]);
时,我认为会发生以下流程。
template
复制到ss
。在这种情况下,ss
是活动的电子表格。setName(employeeObjects[i])
修改工作表名称。那时,由于空值而发生错误。
template
后,工作表名称为Copy of Template
。由于错误,工作表名称未修改。结果,创建了Copy of Template
表。
我认为为了避免错误,有几种方法。因此,请将此修改视为其中之一。
employeeObjects
中删除空值。employeeObjects
是二维数组。请进行如下修改。
来自:var employeeObjects = employeeDataRange.getValues();
至 :
var employeeObjects = employeeDataRange.getValues().filter(String).map(function(e){return e[0]});
filter(String)
删除空值。map(function(e){return e[0]})
将2维数组转换为1维数组。