我使用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();
}
答案 0 :(得分:2)
您可以使用Drive API覆盖文件。详细信息为https://developers.google.com/drive/v3/reference/files/update。
我准备了一种方法来将电子表格覆盖到现有的excel文件中。此方法使用您的方法exportAsExcel()
。首先,请确认是否已在Google API控制台和高级Google服务中启用了Drive API。
src_sheetId
和dst_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'];
如果我误解了你的问题,我很抱歉。