将Google脚本项目从电子表格复制到另一个

时间:2016-02-19 18:07:14

标签: google-apps-script google-sheets

我已经看到很多关于如何使用脚本将工作表复制到Google Spreadsheets中的另一个电子表格的答案,例如this copyTo method

但是现在我有一个包含许多选项卡的大型电子表格,我在绑定脚本中创建了一个新版本的更新。此新表中的数据是测试数据。所以这就是我所拥有的:

  • 旧电子表格文件(一致数据) /旧脚本项目(已废弃)
  • 新电子表格(测试数据)/ 新脚本项目(当前)

然后我需要将新脚本项目复制到旧电子表格(具有一致的数据)。

我知道我可以努力复制每张纸,但这不是问题(除了在命名范围内造成很多麻烦)。问题是如何将脚本项目复制到另一个spreasheet。

4 个答案:

答案 0 :(得分:1)

只需转到脚本编辑器旧电子表格并删除脚本(或将其注释掉)即可。然后打开新电子表格的脚本编辑器并复制脚本。将脚本粘贴到旧电子表格脚本编辑器中。保存它,你应该很高兴。

答案 1 :(得分:1)

似乎没有直接的方式来复制"复制"从电子表格到另一个的脚本您可以使用Installable Triggers

从第一个(或实际上从任何地方)的脚本中为第二个电子表格分配您想要的任何触发器

e.g。你在第一张表中有一个onEdit(e)触发器来执行某些操作, 您可以使用Script App之类的

轻松将其应用于第二个电子表格
var ss = SpreadsheetApp.openById(secod_spreadsheet_id); //or whatever way you like
ScriptApp.newTrigger('onEdit')  //or whatever its name is ...
  .forSpreadsheet(ss)
  .onEdit()  //or onCreate() or onChange()
  .create();

这会将触发器添加到您的第二张表格中,但您必须阅读restrictionsLimitaions的可安装触发器,因为它们将始终在您的帐户上运行(见链接中的解释)

最后一句话,
如果您之前知道要使用多张工作表,则可能需要制作一个包含所有触发器的Standalone脚本,并为工作表分配可安装的触发器

另请注意,这些触发器不能仅使用循环或类似的东西从每张纸上删除和重新分配

您可能还想查看This问题

答案 2 :(得分:1)

您是否正在寻找此问题的解决方案?如果你还在做,这个答案怎么样?最近,添加了Google Apps Script API。通过这种方式,用户可以轻松管理GAS项目文件。此示例脚本使用此API。

要使用此示例,请执行以下安装流程。

安装:

  • 在API控制台上启用Google Apps脚本API。
    • 如果您已经打开了脚本编辑器,则可以通过this link
    • 访问该编辑器
  • 检索当前范围。
    • 在脚本编辑器上,文件 - >项目属性 - >范围
    • 复制范围。
  • https://www.googleapis.com/auth/script.projectshttps://www.googleapis.com/auth/script.external_request的范围添加到脚本编辑器的清单文件(appsscript.json)中。
    • 在脚本编辑器上,查看 - >显示清单文件
    • "oauthScopes": ["https://www.googleapis.com/auth/script.projects", "https://www.googleapis.com/auth/script.external_request", "### other scopes ###"]添加到a​​ppsscript.json,然后保存。
      • 如果您的脚本需要其他范围,请在此处添加。
  • 复制并粘贴此示例脚本,然后运行。请授权。

脚本流程

  1. 检索源项目的文件名。
  2. 检索源项目。
  3. 在Google文档中创建新项目(绑定脚本)。
  4. 按检索到的源项目更新已创建的新项目。
  5. 通过这些流程,源电子表格的项目(绑定脚本)将被复制到目标电子表格。

    示例脚本:

    在发布此示例之前,请输入源电子表格的项目ID和目标电子表格ID。

    function main() {
      var srcProjectId = "### project ID ###"; // Source project ID
      var dstGoogleDocsId = "### file ID of Google Docs ###"; // Destination spreadsheet ID
    
      var baseUrl = "https://script.googleapis.com/v1/projects";
      var accessToken = ScriptApp.getOAuthToken();
    
      // Retrieve filename of bound-script project.
      var srcName = JSON.parse(UrlFetchApp.fetch(baseUrl + "/" + srcProjectId, {
        method: "get",
        headers: {"Authorization": "Bearer " + accessToken}
      }).getContentText()).title;
    
      // Retrieve bound-script project.
      var obj = UrlFetchApp.fetch(baseUrl + "/" + srcProjectId + "/content", {
        method: "get",
        headers: {"Authorization": "Bearer " + accessToken}
      }).getContentText();
    
      // Create new bound script and retrieve project ID.
      var dstId = JSON.parse(UrlFetchApp.fetch(baseUrl, {
        method: "post",
        contentType: 'application/json',
        headers: {"Authorization": "Bearer " + accessToken},
        payload: JSON.stringify({"title": srcName, "parentId": dstGoogleDocsId})
      }).getContentText()).scriptId;
    
      // Upload a project to bound-script project.
      var res = JSON.parse(UrlFetchApp.fetch(baseUrl + "/" + dstId + "/content", {
        method: "put",
        contentType: 'application/json',
        headers: {"Authorization": "Bearer " + accessToken},
        payload: obj
      }).getContentText());
    }
    

    注意:

    • 此脚本将源项目复制为新项目。因此,如果Google文档中存在某些绑定脚本项目,则此脚本不会影响现有脚本。
      • 但是,如果您使用此示例短片,请首先使用新项目和新的Google文档进行测试。这样,请理解这个脚本的工作。

    参考文献:

    如果我误解了你的问题,我很抱歉。

答案 3 :(得分:1)

我认为Google Clasp工具可以帮助您实现自动化。我开始使用它,并且很有希望。例如,您可以在不同的文件夹上同时发布旧项目和新项目的clasp clone [scriptId]。然后,您可以将所有新脚本文件复制到旧文件夹,然后发出clasp push。但是,由于我不是专家,我建议您在概念验证中进行测试:)