如何在用户选择的目标电子表格上复制工作表并复制数据

时间:2017-07-11 18:09:33

标签: google-apps-script google-sheets google-apps

我对Google Apps脚本非常陌生,而且我在努力实现目标方面遇到了麻烦。

我有一个Google表格工作簿,允许用户:

  1. 从下拉列表中选择一个名称(每个名称都有一个唯一/个人名称 与之关联的Google工作簿网址)
  2. 输入所需的电子表格名称
  3. 按“推板”按钮
  4. 用户按下按钮后,我正在尝试完成以下操作:

    1. 复制目标工作簿上已存在的工作表“模板 - 不修改”(与所选名称关联的URL)
    2. 将重复的表格重命名为所需的电子表格名称
    3. 将范围A7:D150从原始工作簿上的“Tracker”工作表复制到目标工作簿上新创建的工作表A7:D150
    4. 原始工作表设置为让用户在运行脚本之前授权工作簿连接。

      这是我的代码:

      function cloneGoogleSheet() {
      
        var sheet = SpreadsheetApp.getActiveSheet();
        var name = sheet.getRange("B10").getValue();
        var url = sheet.getRange("f5").getValue();    
        var tss = SpreadsheetApp.openByUrl(url);
      
      
        tss.setActiveSheet(tss.getSheetByName('Template - Do Not Modify'));
        tss.duplicateActiveSheet();
      
        var activesheet = tss.getActiveSheet();
        activesheet.setName(name);
      
      }
      

      我的问题是:

      1. 使用ActiveSheets似乎并不是一种安全的方法来完成所有这些工作并且有更好的方法。

      2. 尝试使用URL变量时(脚本运行正常,带有硬编码的URL值),我得到一个无效的参数:URL错误。单元格F5根据从下拉列表中选择的名称更新为新URL,使用引用具有唯一URL的名称的查找:

        =查找(B4,    {P71,P72,P73,P74,P75,P76,P77},    {Q71,Q72,Q73,Q74,Q75,Q76,Q77} )

      3. 鉴于我使用了所有这些ActiveSheet变量这一事实,我不确定如何返回原始工作表来复制范围。
      4. 我非常感谢有人向我展示了正确的方法。谢谢!

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用“getSheetByName”?

答案 1 :(得分:0)

Duplicate a Sheet in Google Spreadsheets上尝试Armit Agarwal的教程:

function cloneGoogleSheet() {

  var name = "labnol";
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Template').copyTo(ss);

  /* Before cloning the sheet, delete any previous copy */
  var old = ss.getSheetByName(name);
  if (old) ss.deleteSheet(old); // or old.setName(new Name);

  SpreadsheetApp.flush(); // Utilities.sleep(2000);
  sheet.setName(company);

  /* Make the new sheet active */
  ss.setActiveSheet(sheet);

}