复制电子表格也会复制所有链接的文件
Copying a spreadsheet copies all linked files as well
我希望能够仅复制传播sheet及其所有 sheets 以及所有已定义的 sheet 名称,当我使用库方法时:
spreadSheet.copy(newSSName);
或者,
myFile.makeCopy(newNameOfFile);
目前这些方法复制所有链接的表单和表单中使用的脚本。这是我需要的不必要的副作用,会导致 Drive 文件夹中出现大量混乱。有没有一种方法可以快速有效地完成此操作,而无需逐个单元地复制 sheet by sheet?或者这是唯一的选择?
谢谢。
这个解决方法怎么样?在此解决方法中,Sheets API 用于复制电子表格。对于 Class 电子表格的 copy()、Class 文件的 makeCopy() 和文件:Drive API 的副本,复制的电子表格包括绑定脚本和链接表单。所以我想使用 Sheets API。此解决方法的流程如下。
- 使用 spreadsheets.get 检索源电子表格的对象。
- 通过使用 spreadsheets.create.
包含检索到的对象来创建新的电子表格
通过此流程,可以创建不包含绑定脚本和链接表单的复制电子表格。示例脚本如下。当您使用此脚本时,请在高级 Google 服务和 API 控制台启用表格 API。您可以在 .
了解如何启用表格 API
示例脚本:
var fileId = "### fileId of source Spreadsheet ###"; // Please set here.
var obj = Sheets.Spreadsheets.get(fileId, {fields: "namedRanges,properties,sheets"});
Sheets.Spreadsheets.create(obj);
注:
- 使用此脚本时,请设置源电子表格的fileId。
- 在表格 API 的 spreadsheets.create,无法在特定文件夹中创建电子表格。所以复制的电子表格被创建到根文件夹。如果要在特定文件夹中创建它,请在复制电子表格后将其移动。当然,你可以使用脚本来完成。
- 如果要包含电子表格的
developerMetadata
,请将其添加到 fields
。
参考资料:
- copy() of Class Spreadsheet
- makeCopy() of Class File
- Files: copy of Drive API
- Method: spreadsheets.get of Sheets API
- Method: spreadsheets.create of Sheets API
如果这不是你想要的,我很抱歉。
将电子表格复制到目标文件夹而不复制脚本
function copyspreadsheetwithoutgoogleappsscript() {
const ssid = "";//source spreadsheet id
const fldrid = "";//destination folder id
Drive.Files.update({ parents: [{ id: fldrid }] }, Sheets.Spreadsheets.create(Sheets.Spreadsheets.get(ssid,{fields:"sheets,namedRanges,properties"})).spreadsheetId);
}
子属性使用 /
available fields 介于电子表格和电子表格属性之间
如果您愿意,也可以使用 API 端点:
function copyssurl() {
const ssid = "";
const dfldrid = "";
const url = `https://sheets.googleapis.com/v4/spreadsheets/${ssid}?fields=(sheets%2CnamedRanges%2Cproperties)`;
const options = { "method": "get", "muteHttpExceptions": true, "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() } };
const resp = UrlFetchApp.fetch(url,options);
const obj = JSON.parse(resp.getContentText());
Drive.Files.update({ parents: [{ id: dfldrid }] }, Sheets.Spreadsheets.create(obj).spreadsheetId);
}
%2C is a comma
%2F is a forward slash
我希望能够仅复制传播sheet及其所有 sheets 以及所有已定义的 sheet 名称,当我使用库方法时:
spreadSheet.copy(newSSName);
或者,
myFile.makeCopy(newNameOfFile);
目前这些方法复制所有链接的表单和表单中使用的脚本。这是我需要的不必要的副作用,会导致 Drive 文件夹中出现大量混乱。有没有一种方法可以快速有效地完成此操作,而无需逐个单元地复制 sheet by sheet?或者这是唯一的选择?
谢谢。
这个解决方法怎么样?在此解决方法中,Sheets API 用于复制电子表格。对于 Class 电子表格的 copy()、Class 文件的 makeCopy() 和文件:Drive API 的副本,复制的电子表格包括绑定脚本和链接表单。所以我想使用 Sheets API。此解决方法的流程如下。
- 使用 spreadsheets.get 检索源电子表格的对象。
- 通过使用 spreadsheets.create. 包含检索到的对象来创建新的电子表格
通过此流程,可以创建不包含绑定脚本和链接表单的复制电子表格。示例脚本如下。当您使用此脚本时,请在高级 Google 服务和 API 控制台启用表格 API。您可以在
示例脚本:
var fileId = "### fileId of source Spreadsheet ###"; // Please set here.
var obj = Sheets.Spreadsheets.get(fileId, {fields: "namedRanges,properties,sheets"});
Sheets.Spreadsheets.create(obj);
注:
- 使用此脚本时,请设置源电子表格的fileId。
- 在表格 API 的 spreadsheets.create,无法在特定文件夹中创建电子表格。所以复制的电子表格被创建到根文件夹。如果要在特定文件夹中创建它,请在复制电子表格后将其移动。当然,你可以使用脚本来完成。
- 如果要包含电子表格的
developerMetadata
,请将其添加到fields
。
参考资料:
- copy() of Class Spreadsheet
- makeCopy() of Class File
- Files: copy of Drive API
- Method: spreadsheets.get of Sheets API
- Method: spreadsheets.create of Sheets API
如果这不是你想要的,我很抱歉。
将电子表格复制到目标文件夹而不复制脚本
function copyspreadsheetwithoutgoogleappsscript() {
const ssid = "";//source spreadsheet id
const fldrid = "";//destination folder id
Drive.Files.update({ parents: [{ id: fldrid }] }, Sheets.Spreadsheets.create(Sheets.Spreadsheets.get(ssid,{fields:"sheets,namedRanges,properties"})).spreadsheetId);
}
子属性使用 /
available fields 介于电子表格和电子表格属性之间
如果您愿意,也可以使用 API 端点:
function copyssurl() {
const ssid = "";
const dfldrid = "";
const url = `https://sheets.googleapis.com/v4/spreadsheets/${ssid}?fields=(sheets%2CnamedRanges%2Cproperties)`;
const options = { "method": "get", "muteHttpExceptions": true, "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() } };
const resp = UrlFetchApp.fetch(url,options);
const obj = JSON.parse(resp.getContentText());
Drive.Files.update({ parents: [{ id: dfldrid }] }, Sheets.Spreadsheets.create(obj).spreadsheetId);
}
%2C is a comma
%2F is a forward slash