复制电子表格也会复制所有链接的文件

ele*_*all 1 google-sheets google-apps-script google-drive-api google-sheets-api

当我使用库方法时,我希望能够仅复制电子表格及其所有工作表以及所有定义的工作表名称:

spreadSheet.copy(newSSName);
Run Code Online (Sandbox Code Playgroud)

或者,

myFile.makeCopy(newNameOfFile);
Run Code Online (Sandbox Code Playgroud)

目前,这些方法复制所有链接的表单和表单中使用的脚本。对于我所需要的东西来说,这是一个不必要的副作用,并且会导致驱动器文件夹中出现大混乱。有没有一种方法可以快速有效地完成此操作,而无需逐个单元格、逐个工作表地复制?或者这是唯一的选择?

谢谢。

Tan*_*ike 7

这个解决方法怎么样?在此解决方法中,Sheets API 用于复制电子表格。对于 Class Spreadsheet 的 copy()、Class File 和 Files: copy of Drive API 的 makeCopy(),复制的电子表格包括绑定的脚本和链接的表单。所以我想到使用Sheets API。此解决方法的流程如下。

  1. 使用spreadsheets.get 检索源电子表格的对象。
  2. 通过使用spreadsheets.create 包含检索到的对象来创建新的电子表格。

通过该流程,可以创建不包括绑定脚本和链接表单的复制电子表格。示例脚本如下。当您使用此脚本时,请在高级 Google 服务和 API 控制台中启用 Sheets API。您可以在此处了解如何启用 Sheets API 。

示例脚本:

var fileId = "### fileId of source Spreadsheet ###"; // Please set here.
var obj = Sheets.Spreadsheets.get(fileId, {fields: "namedRanges,properties,sheets"});
Sheets.Spreadsheets.create(obj);
Run Code Online (Sandbox Code Playgroud)

笔记 :

  • 使用此脚本时,请设置源电子表格的fileId。
  • 在Sheets API的spreadsheets.create中,无法在特定文件夹中创建电子表格。因此,复制的电子表格将创建到根文件夹中。如果您想在特定文件夹中创建它,请在复制电子表格后将其移动。当然,您可以使用脚本来完成。
  • 如果您想包含developerMetadata电子表格,请将其添加到fields.

参考 :

更新日期:2023 年 7 月 7 日

当我再次测试上面的脚本时,在当前阶段,我发现它无法正确使用。因为,现阶段,智能芯片已经实现。在这种情况下,当前规范无法将 Sheets API 作为对象进行检索。因此,作为当前的示例脚本,我想添加它。我在这个帖子中回答了这个问题。此外,该脚本使用 Sheets API。因此,请在高级 Google 服务中启用 Sheets API。

使用此功能之前,请先进行设置spreadsheetId

var fileId = "### fileId of source Spreadsheet ###"; // Please set here.
var obj = Sheets.Spreadsheets.get(fileId, {fields: "namedRanges,properties,sheets"});
Sheets.Spreadsheets.create(obj);
Run Code Online (Sandbox Code Playgroud)