【问题标题】:Copying a spreadsheet copies all linked files as well复制电子表格也会复制所有链接的文件
【发布时间】:2018-08-10 16:16:18
【问题描述】:

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

spreadSheet.copy(newSSName);

或者,

myFile.makeCopy(newNameOfFile);

目前,这些方法会复制所有链接的表单和表单中使用的脚本。这对我需要的东西来说是不必要的副作用,并且会导致 Drive 文件夹中的大量混乱。有没有一种方法可以快速有效地做到这一点,而无需逐个单元格,逐页复制?或者这是唯一的选择?

谢谢。

【问题讨论】:

    标签: google-apps-script google-sheets google-drive-api google-sheets-api


    【解决方案1】:

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

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

    通过此流程,可以创建不包括绑定脚本和链接表单的复制电子表格。示例脚本如下。使用此脚本时,请在高级 Google 服务和 API 控制台中启用 Sheets API。您可以在here 了解如何启用 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);
    

    注意:

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

    参考资料:

    如果这不是你想要的,我很抱歉。

    【讨论】:

    • @Cooper 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解您提出的Then is it true that there is no way that Sheets.Spreadsheets.create() can copy the Google Apps Script from the source spreadsheet? 的新问题。可以问一下具体情况吗?
    【解决方案2】:

    将电子表格复制到目标文件夹而不复制脚本

    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);
    }
    

    子属性使用/

    Working With Field Masks

    电子表格和电子表格属性之间的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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-14
      • 2014-12-16
      • 1970-01-01
      • 2014-01-05
      • 2019-10-21
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多