在活动工作表的A列中有工作表名称。
我正在尝试使每个新标签都与我的Template
标签相同,但它们都是空白。
代码如下:
/** @OnlyCurrentDoc */
function makeTabs(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var last = sheet.getLastRow();
for(var i = 1; i < last ; i++){
var tabName = sheet.getRange(i+1,1).getValue();
var templateSheet = ss.getSheetByName("Template");
var create = ss.insertSheet(tabName,{template: templateSheet});
}
}
谁能说出为什么创建的图纸不基于模板?
答案 0 :(得分:1)
这是您要寻找的东西:
function copySheets() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const last = sheet.getLastRow();
const template = ss.getSheetByName('Template');
const sh_names = sheet.getRange('A2:A'+last).getValues().flat([1]);
sh_names.forEach((name)=>{
const copy=template.copyTo(ss);
copy.setName(name);
})
}
我正在使用forEach()遍历活动工作表的 A列中的名称列表。对于每个名称,我将使用以下代码创建模板的副本:
const copy=template.copyTo(ss);
copy.setName(name);
请记住,选择活动工作表时,需要运行此功能(请参阅我的屏幕截图);包含要创建的图纸名称的图纸。这就是我认为,根据工作表名称获得工作表以确保输入正确的信息更安全的原因:
const sheet = ss.getSheetByName('Sheet1');
很明显,您不能多次运行此功能。它将输出一个错误,指出具有这些工作表名称的工作表已经存在。
最后但并非最不重要的是,所有重复的工作表将具有与 Template 工作表完全相同的内容和格式。根据您的问题,我认为这是您的目标。