使用Drive.Files.update将XLSX转存为GSheet时遇Blob错误求助
问题原因及解决方案
错误根源
你调用Drive.Files.update()时参数顺序完全错误,导致媒体数据参数位置传成了Blob,触发类型不匹配报错。Drive.Files.update()的正确参数顺序是:Drive.Files.update(文件元数据, 目标文件ID, 媒体Blob, 可选参数)
你当前把xBlob放在了目标文件ID的位置,自然会抛出类型错误。
另外,想用update覆盖已有文件,前提是得先找到已存在的转换后的GSheet文件,否则update无法生效(缺少目标文件ID)。
修正后的代码
function importXLS(){ var myFolder = "XXXXXXXXXX"; // 替换为你的文件夹ID var targetFileName = "XXXXX.xlsx_converted"; // 目标GSheet文件名 // 定位源XLSX文件 var xlsxFiles = DriveApp.getFolderById(myFolder).searchFiles('title = "XXXXX.xlsx"'); if (!xlsxFiles.hasNext()) return; // 未找到源文件则直接退出 var xFile = xlsxFiles.next(); var xBlob = xFile.getBlob(); // 查找是否已存在转换后的GSheet(指定MIME类型避免同名其他文件干扰) var existingSheet = DriveApp.getFolderById(myFolder).searchFiles( 'title = "' + targetFileName + '" and mimeType = "application/vnd.google-apps.spreadsheet"' ); if (existingSheet.hasNext()) { // 存在目标文件则覆盖更新 var sheetId = existingSheet.next().getId(); Drive.Files.update({}, sheetId, xBlob, { convert: true, supportsAllDrives: true }); } else { // 不存在则创建新文件 Drive.Files.insert({ title: targetFileName, parents: [{id: myFolder}], supportsAllDrives: true }, xBlob, { convert: true, supportsAllDrives: true }); } }
关键说明
- 先定位源XLSX文件,再搜索目标GSheet时指定了GSheet的MIME类型,避免同名非表格文件干扰
- 存在目标文件时,
update的第一个参数传空对象即可(无需修改文件元数据),核心是传入目标GSheet的ID和XLSX的Blob - 不存在目标文件时调用
insert创建,和你最初的逻辑一致 - 去掉了循环(因为你搜索的是固定文件名的XLSX,只会匹配一个文件),若需处理多个XLSX,可调整搜索条件和循环逻辑
内容的提问来源于stack exchange,提问作者old_dirty_maxer
相关产品推荐
相关产品推荐

