我是否可以使用应用脚本覆盖保存在Google云端硬盘上的Excel文件(从Google表格中导出)的内容

时间:2017-04-20 16:03:01

标签: google-apps-script

我使用Google Apps脚本将Google Sheet作为Excel文件导出到Google云端硬盘。然后,Excel文件通过Google Drive Desktop应用程序与其他6位用户同步到其本地计算机。每次导出Google表格时,它都会创建一个新文件,而不是替换旧文件,尽管文件名相同,并删除原始版本。这样就可以了,除非当它与Google Drive Desktop同步时,Windows会删除原始版本并将其发送到回收站。

该文件每15分钟创建一次,大小为3mb,因此几周后回收箱就会充满千兆字节的数据。

是否可以更新文件内容而不是创建新文件?

这是我目前使用的内容:

      var blob = exportAsExcel(spreadsheetId)
      var file = DriveApp.createFile(blob).setName(excelFileName);
      fileId = file.getId();
      file.makeCopy(destinationFolder);
      Drive.Files.remove(fileId);
   }


    function exportAsExcel(spreadsheetId) {
    var file = Drive.Files.get(spreadsheetId);   
      var url = file.exportLinks['application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet'];
      var token = ScriptApp.getOAuthToken();
      var response = UrlFetchApp.fetch(url, {
        headers: {
          'Authorization': 'Bearer ' +  token
        }
      });
      return response.getBlob();
}

1 个答案:

答案 0 :(得分:2)

您可以使用Drive API覆盖文件。详细信息为https://developers.google.com/drive/v3/reference/files/update

我准备了一种方法来将电子表格覆盖到现有的excel文件中。此方法使用您的方法exportAsExcel()。首先,请确认是否已在Google API控制台和高级Google服务中启用了Drive API。

src_sheetIddst_fileId分别是您要覆盖的电子表格ID和现有Excel文件。通过运行overWrite(),将覆盖现有的excel文件。因此,不会更改excel文件的文件名和文件ID。

脚本:

function overWrite(src_sheetId, dst_fileId) {
  UrlFetchApp.fetch(
    "https://www.googleapis.com/upload/drive/v3/files/" + dst_fileId + "?uploadType=multipart",
    {
      method: "PATCH",
      headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()},
      contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      payload: exportAsExcel(src_sheetId).getBytes()
    }
  );
}

顺便说一句,你脚本的exportAsExcel()工作正常吗?当我使用它时,会发生错误。我通过以下修改删除了错误。

来自:

var url = file.exportLinks['application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet'];

收件人:

var url = file.exportLinks['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];

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