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

超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。

核心步骤:

  1. 从Drive获取目标.xlsx文件的Blob并读取二进制数据;
  2. 将SheetJS的纯JS代码引入到Apps Script项目中;
  3. 用库解析二进制数据,提取目标工作表的单元格值;
  4. 将提取到的值批量写入目标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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:10:05