通过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
格式对比示例:
解决方案
- 首先修正流处理逻辑:你修改后的代码存在逻辑错误,
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
相关产品推荐
相关产品推荐

