使用工作表模板插入新工作表不起作用

时间:2020-08-14 16:18:14

标签: google-apps-script google-sheets

在活动工作表的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});
  }
}

谁能说出为什么创建的图纸不基于模板?

1 个答案:

答案 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);        
  })
}

输出:

example

说明:

我正在使用forEach()遍历活动工作表的 A列中的名称列表。对于每个名称,我将使用以下代码创建模板的副本:

const copy=template.copyTo(ss);
copy.setName(name); 

请记住,选择活动工作表时,需要运行此功能(请参阅我的屏幕截图);包含要创建的图纸名称的图纸。这就是我认为,根据工作表名称获得工作表以确保输入正确的信息更安全的原因:

const sheet = ss.getSheetByName('Sheet1');

很明显,您不能多次运行此功能。它将输出一个错误,指出具有这些工作表名称的工作表已经存在。

最后但并非最不重要的是,所有重复的工作表将具有与 Template 工作表完全相同的内容格式。根据您的问题,我认为这是您的目标。

相关问题