【问题标题】:Insert new sheet using sheet template is not working使用工作表模板插入新工作表不起作用
【发布时间】:2020-08-15 01:23:11
【问题描述】:

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

谁能说出为什么创建的工作表不是基于模板?

【问题讨论】:

  • 无法复制。在这里正常工作。
  • Arielle 请让我知道我的解决方案是否适合您!谢谢。

标签: google-apps-script google-sheets


【解决方案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');

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

最后但同样重要的是,所有重复的工作表都将具有与 模板 工作表完全相同的内容格式。根据您的问题,我假设这是您的目标。

【讨论】:

  • 是的,这行得通!感谢您向我解释这一点并帮助解决我的问题!
  • 很高兴它有帮助!
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多