您好我写了一个小脚本来复制电子表格中的一个模板表,作为同一电子表格中的新表格。
我写了两个版本,一个是由菜单驱动的,要求创建新工作表的名称:
function addonenewSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var temp = ss.getSheetByName('template');
var naame = Browser.inputBox("CustomerID to be created");
try {
ss.setActiveSheet(ss.getSheetByName(naame));
}
catch (e) {
ss.insertSheet(naame, {template:temp});
}
}
这个按预期工作,如果我在输入框中这样说,则命名新工作表234。
第二个函数非常相似,但是会解析一些值并尝试一次创建多个工作表:
function addmissingSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var temp = ss.getSheetByName('template');
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for (var i = 10; i < data.length; i++) {
if(typeof data[i][1] == 'number'){
try {
ss.setActiveSheet(ss.getSheetByName(data[i][1]));
}
catch (e) {
Logger.log('Customer ID: ' + data[i][1]);
var insertpage = data[i][1];
ss.insertSheet(insertpage, {template:temp});
}
}
}
}
只要涉及Logger.log,data [i] [1]具有正确的值,但不知何故,insertSheet创建名为“模板副本”,“模板2的副本”的工作表...而不是取值在数据[i] [1]
中分配有谁知道为什么会出现这种行为以及如何解决这个问题?
答案 0 :(得分:1)
您的第二个脚本不使用正确的变量类型。您使用插页的方法使用类型(<string>, {template:<sheet>})
。由于您的客户ID是一个数字,它不起作用。你可以做一个简单的修复
更改
var insertpage = data[i][1];
成:
var insertpage = data[i][1].toString();
您现在可以使用客户ID(这是一个数字)来创建工作表名称(这是一个字符串)