我有以下谷歌电子表格绑定脚本,其工作是在第一张工作表('项目')的A:A列中有数据时创建“模板”表的副本。
这个脚本工作得很好。但是,后来我在这个脚本中添加了一行代码(下面脚本中的代码的最后一行),用于提取并将新创建的工作表名称放在其中一个单元格J2中。
不知何故,当其余代码正常工作时,这行代码无效。对此有任何建议将不胜感激。谢谢!
function onOpen() {
var menu = [{
name : "Add",
functionName : "newSheet"
}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Sheet", menu);
}
function newSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = ss.getSheetByName("Template");
var sheet1 = ss.getSheetByName("Projects")
var getNames = sheet1.getRange("A:A").getValues().filter(String).toString().split(",");
for (var i = 0; i < getNames.length; i++) {
var copy = ss.getSheetByName(getNames[i]);
if (copy) {
Logger.log("Sheet already exists");
} else {
templateSheet.copyTo(ss).setName(getNames[i]);
ss.setActiveSheet(ss.getSheetByName(getNames[i]));
ss.moveActiveSheet(ss.getNumSheets());
ss.getSheetByName(getNames[i]).copyTo(ss.getSheetByName(getNames[i]).getRange("J2"));
}
}
}
答案 0 :(得分:1)
根据GAS文档,Sheet类的copyTo()方法仅接受Spreadsheet实例作为参数。它不起作用,因为您将Range作为参数传递。此外,getSheetByName()返回Sheet对象,因此您实际上并未复制工作表的名称。
如果您想修改特定范围,则使用Range会更方便。
var sheet = ss.getSheetByName(getNames[i]);
var cell = sheet.getRange("J2");
cell.setValue(getNames[i]); // writing the name of the sheet to cell J2