【问题标题】:Copy a google script project from a Spreadsheet to another将 google 脚本项目从电子表格复制到另一个
【发布时间】:2016-06-01 10:01:57
【问题描述】:

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

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

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

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

我知道我可以努力复制每张纸,但这真的不是这里的问题(除了命名范围也会造成很多麻烦)。问题是如何将脚本项目复制到另一个电子表格。

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:

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

【讨论】:

  • 我同意。但如果您需要谨慎,请复制旧电子表格,它会自动复制绑定的脚本,然后按照 Ed Nelson 在副本中的建议进行操作,以证明一切正常。
  • 这是一个项目。大量的脚本文件。如果复制粘贴这么简单,我真的不会问这个问题。
【解决方案2】:

似乎没有直接的方法可以将脚本从电子表格“复制”到另一个但是您可以从第一个脚本(或从实际上在任何地方)使用Installable Triggers

例如你在第一张表中有一个 onEdit(e) 触发器,它可以做一些事情, 您可以使用Script App like 轻松地将其应用于第二个电子表格

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 问题

【讨论】:

  • 嗯...我认为这不适用于我的情况。这是一个“版本控制”问题。我只想完全丢弃其中一张表,只保留好的数据(表 1)和新代码(表 2)。
【解决方案3】:

您是否正在寻找这个问题的解决方案?如果你仍然这样做,这个答案怎么样?最近,添加了 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 的范围添加到脚本编辑器的Manifests 文件(appsscript.json)。
    • 在脚本编辑器上,查看 -> 显示清单文件
    • "oauthScopes": ["https://www.googleapis.com/auth/script.projects", "https://www.googleapis.com/auth/script.external_request", "### other scopes ###"] 添加到appsscript.json,并保存。
      • 如果您的脚本需要其他作用域,请在此处添加。
  • 复制并粘贴此示例脚本,然后运行。并请授权。

脚本流程

  1. 检索源项目的文件名。
  2. 检索源项目。
  3. 在 Google 文档中创建新项目(绑定脚本)。
  4. 通过检索到的源项目更新创建的新项目。

通过这些流程,源电子表格的项目(绑定脚本)被复制到目标电子表格。

示例脚本:

在启动此示例之前,请输入源电子表格的项目 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 文档进行测试。在此,请理解这个脚本的工作。

参考资料:

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

更新日期:2019 年 7 月 4 日

2019 年 4 月 8 日,Google Apps 脚本项目的规范发生了更改。请参阅Google Cloud Platform Projects 的详细信息。当您将 Google Apps Script API 与 2019 年 4 月 8 日之后创建的 GAS 项目一起使用时,请创建一个新的 Cloud Platform Project 并将 GAS 项目链接到创建的 Cloud Platform Project。 (在脚本编辑器,Resources --> Cloud Platform project)这样就可以使用上面的流程了。

【讨论】:

    【解决方案4】:

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

    编辑(2019-06-21): 使用该产品几个月后,我确认这种方法非常有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      相关资源
      最近更新 更多