问题描述
我一直在从共享的公司驱动器中获取大量源电子表格,将它们标准化,然后将它们组合成一个母版表供我使用。一些工作表作为 Excel 文档上传。期望典型员工正确设置格式或让某人手动更改文件是不切实际的,因此我编写了一个脚本来执行此操作。
整个过程唯一的问题是,每次有人上传、更新或替换 Excel 文件时,代码都必须以 Google Sheets 格式制作一个新的临时副本,而不是覆盖现有的。此外,我必须根据临时文件在通过管道传输到主文件之前需要更改的方式在各种位置(试图避免使用全局变量)调用 deleteTempFile(tempID) 函数。
我已经修改以下代码几个星期了,但总是回到这个,因为我只是没有找到实际上可以在现有表格上使用 Drive.Files.insert 或在 Drive.Files 上任何有用的东西.更新。
function convertXlsxToGsheets(excelFile,tempName,tempFolderID) {
var blob = excelFile.getBlob();
var payload = {title: tempName,parents: [{id:tempFolderID}]}; // Problem lines
var tempSpreadsheet = Drive.Files.insert(payload,blob,{convert: true}); // Problem lines
var tempID = tempSpreadsheet.getId();
Logger.log('Temporary Spreadsheet ID: ' + tempID);
return tempID;
}
解决方法
我相信你的目标如下。
- 您想用 XLSX 数据覆盖现有的整个电子表格,而不更改电子表格的文件 ID。
- 您希望使用 Google 高级服务的 Drive API 实现这一目标。
在这种情况下,我认为使用了 Drive API 的 Drive.Files.update()
。示例脚本如下。
示例脚本:
在使用此脚本之前,请确认是否已在高级 Google 服务中启用 Drive API。 Ref
var existingSpreadsheetId = "###"; // Please set the Spreadsheet ID of the existing spreadsheet you want to overwrite.
var blob = excelFile.getBlob(); // This is from your script.
Drive.Files.update({},existingSpreadsheetId,blob);
重要提示:
在这个示例脚本中,现有的电子表格被覆盖。请注意这一点。因此,当您测试此脚本时,我建议使用示例电子表格。