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

Google Sheets导入xlsx文件脚本报错:Service Spreadsheets访问失败

问题排查与修复:合并文件夹中Google Sheets和XLSX文件的脚本错误

错误根源

你遇到的报错是因为SpreadsheetApp.openById()仅支持直接打开原生Google Sheets格式的文件,XLSX属于微软Excel的二进制格式,无法通过该方法直接访问。当脚本遍历到XLSX文件时,尝试用这个方法打开就会抛出格式不兼容的异常。

修复方案

需要在脚本中加入文件类型判断,对XLSX文件先转换为Google Sheets格式的临时文件,再读取数据,处理完成后可删除临时文件避免占用空间。

修改后的完整代码

function Import_Kredo() {
  var arr = [];
  var folder = DriveApp.getFolderById("13kymSiqX0-L6a9ev4It1_BEjH-xM8rnc");
  var files = folder.getFiles();

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("Table 1");
  copySheet.getRange('A2:G').clear();

  while (files.hasNext()) {
    var file = files.next();
    var fileId = file.getId();
    var fileMimeType = file.getMimeType();
    var tempSheet = null;

    try {
      // 区分处理不同类型的文件
      if (fileMimeType === MimeType.GOOGLE_SHEETS) {
        tempSheet = SpreadsheetApp.openById(fileId);
      } else if (fileMimeType === MimeType.MICROSOFT_EXCEL || fileMimeType === MimeType.MICROSOFT_EXCEL_LEGACY) {
        // 将XLSX转换为临时Google Sheets文件
        var convertedFile = Drive.Files.copy({
          title: file.getName() + "_temp",
          mimeType: MimeType.GOOGLE_SHEETS
        }, fileId);
        tempSheet = SpreadsheetApp.openById(convertedFile.id);
      } else {
        // 跳过不支持的文件类型
        continue;
      }

      // 读取目标工作表数据(保留原逻辑)
      var targetSheet = tempSheet.getSheetByName("Table 1");
      if (!targetSheet) continue; // 跳过没有"Table 1"的文件
      var sheetsRange = targetSheet.getDataRange();
      var sheetsValues = sheetsRange.getValues().filter(r => r[1]).filter(e => e);
      arr = arr.concat(sheetsValues.slice(1));

    } catch (e) {
      console.log("处理文件失败:" + file.getName() + ",错误信息:" + e.message);
    } finally {
      // 删除临时转换的文件(仅限XLSX转来的)
      if (tempSheet && fileMimeType !== MimeType.GOOGLE_SHEETS) {
        DriveApp.getFileById(tempSheet.getId()).setTrashed(true);
      }
    }
  }

  // 写入数据到目标表,先判断数组是否为空
  if (arr.length > 0) {
    copySheet.getRange(5, 1, arr.length, arr[0].length).setValues(arr);
  }
}

注意事项

  1. 启用Drive API:在脚本编辑器中点击「服务」→ 搜索「Drive API」→ 添加,否则Drive.Files.copy方法会报错
  2. 临时转换的文件会被移到回收站,可根据需要恢复
  3. 代码加入了错误捕获,单个文件处理失败不会导致整个脚本终止
  4. 自动跳过没有"Table 1"工作表的文件,避免空指针异常

内容的提问来源于stack exchange,提问作者Елена Желевская

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:55:21