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

Dan*_*ler 4 google-sheets google-apps-script

我见过很多关于如何使用脚本将工作表复制到 Google 电子表格中的另一个电子表格的答案,例如此 copyTo 方法

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

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

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

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

Tan*_*ike 6

您还在寻找这个问题的答案吗?如果你仍然这样做,这个答案怎么样?最近,添加了 Google Apps Script API。这样,用户就可以轻松管理GAS项目文件。此示例脚本使用此 API。

为了使用该示例,请执行以下安装流程。

安装 :

  • 在 API 控制台启用 Google Apps 脚本 API。
    • 如果您已经打开了脚本编辑器,则可以通过此链接访问该编辑器。
  • 检索当前范围。
    • 在脚本编辑器上,文件 -> 项目属性 -> 范围
    • 复制范围。
  • https://www.googleapis.com/auth/script.projects将和的范围添加https://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 ###"]到 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());
}
Run Code Online (Sandbox Code Playgroud)

笔记 :

  • 该脚本将源项目复制为新项目。因此,如果Google Docs中有一些绑定的脚本项目,则该脚本不会影响现有脚本。
    • 但是,如果您使用此示例 sceipt,首先请使用新项目和新 Google 文档进行测试。至此,请大家了解一下这个脚本的工作原理。

参考 :

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

更新日期:2019 年 7 月 4 日

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