Tra*_*Son 6 buffer node.js arraybuffer exceljs
我在我的项目中使用exceljs和 Typescript。但writeBuffer()函数返回ExcelJS.Buffer而不是Buffer类型。并且由于ExcelJS.Buffer继承自ArrayBuffer,转换ArrayBuffer为Buffer将破坏 Excel 文件。有人有解决这个问题的办法吗?提前致谢!
declare interface Buffer extends ArrayBuffer { }
Run Code Online (Sandbox Code Playgroud)
let resultExcel: Buffer; // buffer
const tmpResultExcel: ExcelJS.Buffer = await tmpWorkBook.xlsx.writeBuffer(); // arraybuffer
resultExcel = Buffer.from(tmpResultExcel); // doesn't work well
Run Code Online (Sandbox Code Playgroud)
tmpWorkBook.xlsx.writeBuffer();实际上,在我看来,问题来自于错误的返回类型定义。
如果你尝试Buffer.isBuffer(tmpResultExcel),你会发现那tmpResultExcel是一个实际的 JavaScript 缓冲区。
您可以使用以下方法解决类型问题
const tmpResultExcel: any = await tmpWorkBook.xlsx.writeBuffer();
Run Code Online (Sandbox Code Playgroud)
您可以在代码中使用 tmpResultExcel 作为缓冲区。
小智 5
我也遇到过这个,这是 2022 年 exceljs 的最新版本(撰写本文时为 4.3.0)。
\n正如 @Fr\xc3\xa9d\xc3\xa9ric Lang 所说,这确实是一个打字问题。此外,即使检查提供的类型并没有得出明确的解决方案,因为workbook.xlsx.writeBuffer()函数的签名告诉我们它返回一个普通的Buffer.
您可能只想将其“转换”为exceljs.Buffer正确的.anyBufferawait
private async writeXlsxBuffer(data: BillingSummaryFileLine[]): Promise<Buffer> {\n const workbook = new exceljs.Workbook();\n await workbook.xlsx.readFile("my_model.xlsx");\n ...\n return await workbook.xlsx.writeBuffer() as Buffer;\n }\nRun Code Online (Sandbox Code Playgroud)\n你必须确保这实际上是一个Buffer,因为使用as关键字 Typescript 会假设你知道你在做什么,将一个对象转换为另一种类型。
| 归档时间: |
|
| 查看次数: |
7553 次 |
| 最近记录: |