如何正确使用高级驱动器服务来替换现有的电子表格,而不是每次调用函数时制作新的电子表格?



我一直在从共享的公司驱动器中获取一堆源电子表格,对它们进行规范化,并将它们组合成一个主表供我使用。有些表格会以excel文档的形式上传。期望普通员工获得正确的格式或让某人手动修改文件是不切实际的,因此我编写了一个脚本来完成。

整个过程中唯一的问题是每次有人上传,更新或替换excel文件时,代码必须以Google Sheets格式制作新的临时副本,而不是覆盖现有的副本。此外,我必须调用一个deleteTempFile(tempID)函数的各种点(试图避免使用全局变量)基于如何临时文件需要改变之前,它被管道到主文件。

我已经修改了下面的代码几个星期了,但总是回到这一点,因为我只是没有找到实际工作,在现有的表上使用Drive.Files.insert或任何有用的Drive.Files.update.

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。
  • 你想要实现这一点使用驱动API的高级谷歌服务。

在这种情况下,我认为使用的是Drive API的Drive.Files.update()。示例脚本如下:

示例脚本:

在使用此脚本之前,请确认驱动器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);

重要:

在这个示例脚本中,现有的电子表格被覆盖。请小心这个。因此,当您测试此脚本时,我想建议使用示例电子表格。

参考:

  • 文件:更新

相关内容

最新更新