【发布时间】:2015-02-08 17:15:14
【问题描述】:
大家好,
我正在尝试使用流将数据对象保存到 Excel 文件中。但是保存后无法打开文件。
同时我使用fs.writeFile保存同一个数据对象,Excel文件可以正常打开查看。
请看下面的代码。当我比较这两个文件时,使用 Stream 保存的文件大约大 2kb,如果我删除“二进制”参数,fs.writeFile 也将不起作用,所以我认为“二进制”正在发挥作用。
你能告诉我我在这里缺少什么吗?提前致谢!
var fs = require('fs'),
path = 'temp',
Stream = require('stream'),
rs = new Stream.Readable({ objectMode: true }),
outFileStream,
result = generateExcelData();
rs.push(result);
rs.push(null);
outFileStream = fs.createWriteStream(path + 'stream.xlsx');//stream.xlsx cannot be opened
rs.pipe(outFileStream);
fs.writeFile(path + 'stream2.xlsx', result, 'binary');//stream2.xlsx can be opened without any issue
【问题讨论】:
-
你为什么使用流(甚至在
objectMode中)只是为了将结果写入文件?为什么不直接写数据呢?另外,result是什么值?缓冲区?一个字符串?还有什么? -
@mscdex:我想使用流的原因是因为数据可能非常大——它是一个 json 对象数组。有几次我的内存超出错误。所以我试图使用流。谢谢
-
您可以考虑使用
JSONStream.stringify()并将每个数组元素推送给它,而不是生成一个大型数据集。然后将其传送到outFileStream。 -
谢谢,我得到了它的以下功能:buffer = new Buffer(result, 'binary');
标签: node.js excel stream binary filestream