Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在用户选择的目标电子表格上复制工作表并复制数据_Google Apps Script_Google Sheets_Google Apps - Fatal编程技术网

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

Google apps script 如何在用户选择的目标电子表格上复制工作表并复制数据,google-apps-script,google-sheets,google-apps,Google Apps Script,Google Sheets,Google Apps,我对谷歌应用程序脚本非常陌生,在实现我的目标时遇到了困难 我有一个Google Sheets工作簿,允许用户: 从下拉列表中选择一个名称(每个名称都有一个唯一的/单独的 与之关联的google工作簿URL) 键入所需的电子表格名称 按下“推纸”按钮 一旦用户按下按钮,我将尝试完成以下任务: 复制目标工作簿上已存在的工作表“模板-请勿修改”(与选定名称关联的URL) 将复制的工作表重命名为所需的电子表格名称 将范围A7:D150从原始工作簿上的工作表“跟踪器”复制到目标工作簿上新创建的工作表范围A

我对谷歌应用程序脚本非常陌生,在实现我的目标时遇到了困难

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

  • 从下拉列表中选择一个名称(每个名称都有一个唯一的/单独的 与之关联的google工作簿URL)
  • 键入所需的电子表格名称
  • 按下“推纸”按钮
  • 一旦用户按下按钮,我将尝试完成以下任务:

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

    这是我的密码:

    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);
    
    }
    
    我的问题是:

  • 使用ActiveSheets似乎不是一种安全的方法,而且还有更好的方法

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

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

  • 考虑到我正在使用所有这些ActiveSheet变量,我不知道如何回到我的原始工作表来复制范围

  • 如果有人能告诉我正确的方法,我将不胜感激。谢谢

    您尝试过使用“getSheetByName”吗

    试试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);
    
    }