超50MB的.xlsx文件转Google Sheets受限,求提取指定工作表方案
问题
另有团队生成的约55MB的.xlsx文件会上传至Google Drive文件夹,仅其中带有引用的一个工作表与我相关。我的最终目标是将该工作表以值粘贴的形式存入单独的Google Sheets中,供后续调用数据。
当前计划如下:
- 将.xlsx文件转换为Google Sheets格式,以便通过Apps Script进行操作;
- 将该目标工作表复制到静态Google Sheets中,每周用新数据覆盖,作为引用源。
我已编写大部分代码,测试可成功转换小体积.xlsx文件,但因目标文件约55MB超出50MB限制而失败,代码如下:
function convertExceltoGoogleSpreadsheet2(fileName) { try { fileName = fileName || 'filename.xlsx'; var excelFile = DriveApp.getFilesByName(fileName).next(); var fileId = excelFile.getId(); var folderId = Drive.Files.get(fileId).parents[0].id; var blob = excelFile.getBlob(); var resource = { title: excelFile.getName().replace(/\.xlsx?/, ''), key: fileId, }; Drive.Files.insert(resource, blob, { convert: true, }); } catch (f) { Logger.log(f.toString()); } }
现需问询:在无法干预源数据生成流程的情况下,有无绕过文件大小限制的方案?我曾考虑将.xlsx转成.csv来缩小体积,但因文件超限无法操作。能否直接提取目标工作表的值到其他表格以规避大小限制?只要能在Apps Script中访问该文件,后续操作可自行完成。
解决方案
方案1:用第三方Excel解析库直接提取目标工作表数据
无需完整转换整个大文件,直接通过开源Excel解析库(如SheetJS/xlsx的纯JS版本)读取Drive中.xlsx文件的二进制内容,定位到目标工作表提取数据,再写入目标Google Sheets。
核心步骤:
- 从Drive获取目标.xlsx文件的Blob并读取二进制数据;
- 将SheetJS的纯JS代码引入到Apps Script项目中;
- 用库解析二进制数据,提取目标工作表的单元格值;
- 将提取到的值批量写入目标Google Sheets,覆盖原有内容。
示例核心代码:
function extractTargetSheet() { const fileName = 'filename.xlsx'; const targetSheetName = '你的目标工作表名称'; const destSpreadsheetId = '目标Google Sheets的ID'; const destSheetName = '存储数据的工作表名称'; // 获取Excel文件二进制数据 const excelFile = DriveApp.getFilesByName(fileName).next(); const blob = excelFile.getBlob(); const data = blob.getBytes(); // 依赖SheetJS库解析数据(需提前将库代码添加到项目) const workbook = XLSX.read(data, {type: 'array'}); const worksheet = workbook.Sheets[targetSheetName]; // 转换为二维数组格式 const values = XLSX.utils.sheet_to_json(worksheet, {header: 1}); // 写入目标Google Sheets const destSheet = SpreadsheetApp.openById(destSpreadsheetId).getSheetByName(destSheetName); destSheet.clearContents(); if (values.length > 0) { destSheet.getRange(1, 1, values.length, values[0].length).setValues(values); } }
方案2:拆分Excel文件后转换(备选)
如果大文件体积主要来自无关工作表,可通过Apps Script调用外部工具,先将原.xlsx拆分为仅包含目标工作表的小文件,再转换为Google Sheets。但该方法依赖外部服务,优先级低于方案1。
方案3:检查Workspace配额(概率低)
若使用Google Workspace账号,可确认是否有更高的文件转换配额,但50MB属于通用限制,此方法大概率无效。
注意事项:
- 确保SheetJS的JS代码兼容Apps Script环境(纯JS版本可直接使用);
- 处理超大工作表时,需注意Apps Script的6分钟执行时限,必要时分批次写入数据;
- 给脚本分配足够的Drive和Sheets访问权限。
内容的提问来源于stack exchange,提问作者ssubr
相关产品推荐
相关产品推荐

