从Google Cloud Storage下载Excel返回buffer,如何获取可编辑的实际文件
解决方案
问题根源
- 从Firebase Admin SDK下载得到的是Excel文件的原始二进制
Buffer,未经过解析无法直接读取.Sheets等Excel结构属性 - 原有代码中
writeToTemplate函数误用了未定义的templateFile变量,未使用传入的文件参数 - 写入数据后的Excel对象需要转回
Buffer格式才能用于存储或传输
操作步骤
- 确保已安装SheetJS依赖:
npm install xlsx
- 在代码头部引入依赖:
import * as XLSX from 'xlsx'
- 修改
getTemplate函数,将下载得到的Buffer解析为可操作的工作簿对象:
export const getTemplate = async (fileName: string) => { const fileRef = admin .storage() .bucket() .file('sheets/template.xlsx') const [fileBuffer] = await fileRef.download() // 解析二进制Buffer为工作簿对象 return XLSX.read(fileBuffer, { type: 'buffer' }) }
- 修正
writeToTemplate函数逻辑,完成数据写入后按需转回Buffer:
export const writeToTemplate = ( objects: any[], sheetNames: string[], workbook // 传入getTemplate返回的解析后工作簿对象 ) => { objects.forEach((dataObject, index) => { const sheetName = sheetNames[index] const worksheet = workbook.Sheets[sheetName] // 写入JSON数据到对应工作表,origin: -1表示追加到现有内容末尾,不需要追加可删除该配置 XLSX.utils.sheet_add_json(worksheet, dataObject, { origin: -1 }) }) // 将修改后的工作簿转回xlsx格式Buffer,用于后续存储或返回 return XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }) }
后续操作
如果需要将修改后的Excel重新存回Firebase Storage,直接将writeToTemplate返回的Buffer传入存储SDK的对应写入方法即可。
内容的提问来源于stack exchange,提问作者CaitlynCodr
相关产品推荐
相关产品推荐

