You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:35:19