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

通过Google Drive API下载xlsx文件时格式丢失问题求助

问题:Google Drive API导出Google Sheets表格丢失格式,手动下载正常

我尝试通过Google Drive API下载一个此前使用Google Sheets API编程创建的表格。通过Drive手动下载该表格时所有格式都完整保留,但使用Drive API导出时格式会丢失,暂未找到修复方案,我的导出代码如下:

await drive.files
    .export(
        {
            fileId,
            auth: jwToken,
            mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        },
        { responseType: "stream" }
    )
    .then((resp) => {
        const dest = fs.createWriteStream(`${__dirname}/google-api-files/temp/temp-sheet.xlsx`);
        resp.data.pipe(dest);
    })
    .catch((err) => {
        console.log(err, " :: err in export");
    });

我暂未在网上找到相关解决资料,如果大家有修复思路欢迎提供建议。

编辑1

根据网友建议我修改了代码,如下所示:

await drive.files
    .export(
        {
            fileId: fileId,
            auth: jwToken,
            mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        },
        { responseType: "stream" }
    )
    .then((resp) => {
        const dest = fs.createWriteStream(`${__dirname}/google-api-files/temp/temp-sheet.xlsx`);
        resp.data.on("finish", () => {
            resp.data.pipe(dest);
        });
    })
    .catch((err) => {
        console.log(err, " :: err in export");
    });

但修改后下载的电子表格依旧存在格式丢失的问题。

编辑2

格式对比示例:
Spreadsheet Examples

解决方案
  • 首先修正流处理逻辑:你修改后的代码存在逻辑错误,finish事件是可读流数据读取完成后才触发的事件,此时再执行pipe操作不会写入任何数据,反而会导致生成的xlsx文件不完整,出现格式丢失的问题。正确的流处理写法如下:
await drive.files
    .export(
        {
            fileId,
            auth: jwToken,
            mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        },
        { responseType: "stream" }
    )
    .then((resp) => {
        const dest = fs.createWriteStream(`${__dirname}/google-api-files/temp/temp-sheet.xlsx`);
        resp.data.pipe(dest);
        // 监听可写流的finish事件确认文件写入完成
        dest.on('finish', () => {
            console.log('文件导出完成');
        });
        // 增加写入错误监听,避免文件异常
        dest.on('error', (err) => {
            console.error('文件写入出错:', err);
        });
    })
    .catch((err) => {
        console.log(err, " :: err in export");
    });
  • 检查授权权限范围:确认你使用的jwToken包含https://www.googleapis.com/auth/drive或https://www.googleapis.com/auth/drive.readonly权限,仅使用Google Sheets API的权限导出时,会丢失部分Drive层存储的格式元数据。
  • 确认格式兼容性:如果你使用了Google Sheets特有的功能(如条件格式规则、嵌入式图表、数据验证规则、连接的数据源等),直接导出为xlsx格式会丢失部分不兼容的格式,你可以先导出为谷歌表格原生格式,再通过官方工具做格式转换,或者改用xlsx支持的等效格式实现。
  • 替代方案:如果上述方案都无法解决问题,可以调用Google Sheets API的spreadsheets.get接口获取表格的所有单元格格式、样式等元数据,再配合xlsx等第三方库手动构建xlsx文件,可以完全保留自定义格式。

内容的提问来源于stack exchange,提问作者thesofaking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:15:08