解决Google Drive中50MB+多工作表XLSX转Google Sheets的大小超限报错
大体积XLSX转Google Sheets解决方案(超50MB文件适用)
方案一:直接解析XLSX内容写入Google Sheets(绕过Drive转换限制)
利用XLSX解析库直接读取Google Drive中XLSX文件的内容,逐工作表写入新建的Google Sheets,无需依赖Drive的文件转换API,从而避开50MB的转换限制。
实现步骤:
- 在Google Apps Script编辑器中,点击「资源」>「库」,添加SheetJS库(项目ID:
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0),选择最新版本。 - 启用Drive高级服务:点击「服务」>「添加服务」,找到「Drive API」并启用。
- 运行以下脚本:
function convertLargeXLSXtoGoogleSheets() { // 替换为你的大XLSX文件ID const excelFileId = "YOUR_XLSX_FILE_ID"; // 替换为目标文件夹ID(可选,不填则存在根目录) const targetFolderId = "YOUR_TARGET_FOLDER_ID"; // 获取XLSX文件的Blob const file = DriveApp.getFileById(excelFileId); const blob = file.getBlob(); const data = blob.getBytes(); // 用SheetJS解析XLSX const workbook = XLSX.read(data, { type: 'array' }); // 创建新的Google Sheets文件 let newSpreadsheet; if (targetFolderId) { const folder = DriveApp.getFolderById(targetFolderId); newSpreadsheet = SpreadsheetApp.create(file.getName().replace('.xlsx', ''), 1, 1, folder); } else { newSpreadsheet = SpreadsheetApp.create(file.getName().replace('.xlsx', '')); } // 遍历每个工作表,写入数据 workbook.SheetNames.forEach(sheetName => { const worksheet = workbook.Sheets[sheetName]; // 将工作表内容转换为二维数组 const sheetData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); // 创建新工作表 const newSheet = newSpreadsheet.insertSheet(sheetName); // 写入数据(数据量极大时分批次写入避免超时) if (sheetData.length > 0) { newSheet.getRange(1, 1, sheetData.length, sheetData[0].length).setValues(sheetData); } }); // 删除默认创建的第一个空白工作表 const defaultSheet = newSpreadsheet.getSheetByName('Sheet1'); if (defaultSheet) newSpreadsheet.deleteSheet(defaultSheet); Logger.log(`转换完成,新表格ID:${newSpreadsheet.getId()}`); }
注意事项:
- 若XLSX文件包含百万级行数据,需将数据分批次写入(比如每10000行写入一次),避免Google Apps Script的6分钟执行超时限制。
- SheetJS库支持多数XLSX格式,但复杂公式或宏可能无法完全兼容,需提前测试。
方案二:拆分XLSX后分批转换
如果不想引入第三方库,可先将大XLSX拆分为多个小于50MB的子文件,再用你现有代码分别转换,最后合并到同一Google Sheets中。
实现思路:
- 本地用Excel或Python脚本(如pandas)将大XLSX按工作表或行拆分为多个小XLSX文件。
- 将拆分后的小文件上传到Google Drive。
- 修改现有脚本,遍历所有小XLSX文件逐个转换,再将转换后的工作表复制到目标主表格。
合并转换结果的示例脚本:
function mergeConvertedSheets() { // 替换为存放拆分后XLSX转换结果的文件夹ID const convertedFolderId = "YOUR_CONVERTED_FOLDER_ID"; // 目标主表格ID const targetSpreadsheetId = "YOUR_TARGET_SPREADSHEET_ID"; const targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetId); const folder = DriveApp.getFolderById(convertedFolderId); const files = folder.getFilesByType(MimeType.GOOGLE_SHEETS); while (files.hasNext()) { const sheetFile = files.next(); const sourceSpreadsheet = SpreadsheetApp.openById(sheetFile.getId()); // 遍历源表格的所有工作表并复制到目标表格 sourceSpreadsheet.getSheets().forEach(sheet => { sheet.copyTo(targetSpreadsheet); }); } Logger.log("合并完成"); }
方案三:Google Workspace企业账户批量转换
若使用Google Workspace企业版,可联系管理员启用批量文件转换功能,该功能支持更大体积的文件转换,无需编写复杂脚本。
内容的提问来源于stack exchange,提问作者jayesh patel
相关产品推荐
相关产品推荐

