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); } }
注意事项
- 启用Drive API:在脚本编辑器中点击「服务」→ 搜索「Drive API」→ 添加,否则
Drive.Files.copy方法会报错 - 临时转换的文件会被移到回收站,可根据需要恢复
- 代码加入了错误捕获,单个文件处理失败不会导致整个脚本终止
- 自动跳过没有"Table 1"工作表的文件,避免空指针异常
内容的提问来源于stack exchange,提问作者Елена Желевская
相关产品推荐
相关产品推荐

