Excelljs - 如何从流创建工作表
Excelljs - how to create a sheet from stream
我正在使用ExcellJS库在Node.js(happy.js)上操作Excell。
我让它根据上传的文件创建工作表。我做了这样的事情:
uploadItems: function (request, reply) {
var data = request.payload;
if (data.file) {
var name = data.file.hapi.filename;
//var path = __dirname + "/uploads/" + name;
var path = process.cwd() + "/uploads/" + name;
var file = fs.createWriteStream(path);
data.file.on('end', function (err) {
var workbook = new Excel.Workbook();
var bulkParts = [];
workbook.xlsx.readFile(path)
.then(function (workbook) {
workbook.eachSheet(function (worksheet, sheetId) {
worksheet.eachRow({includeEmpty: true}, function (row, rowNumber) {
var singleItem = new _Items(data.ProductId, row.values[1], row.values[2]);
bulkParts.push(singleItem);
console.log("Row " + rowNumber + " = " + JSON.stringify(row.values));
});
});
file.on('error', function (err) {
console.error(err)
});
data.file.pipe(file);
}
...
这行得通。此方法从流创建一个文件,然后我读取此文件并创建我的对象。我宁愿直接从流中创建文件,从而避免在磁盘上创建。
Excell 插件的文档提到了这一点:
// pipe from stream
var workbook = new Excel.Workbook();
stream.pipe(workbook.xlsx.createInputStream());
但老实说,我尝试了很多方法,只是无法让它从流中创建对象。任何帮助,不胜感激。
确保您的上传路由已正确配置为接受文件流。在下面的示例中,request.payload.file
是您传递到workbook.xlsx.read
的流。然后你就可以处理承诺了。
var uploadRoute = {
method: 'POST',
path: '/upload',
config: {
validate: {
payload: {
file: joi.any()
}
},
payload: {
maxBytes: 30009715200,
output: 'stream',
parse: true,
allow: 'multipart/form-data'
},
description: 'upload an excel file'
},
handler: uploadRouteHandler
};
function uploadRouteHandler(request, reply) {
if (request.payload.file) { // request.payload.file is your stream
var workbook = new Excel.Workbook();
workbook.xlsx.read(request.payload.file)
.then(function(excelworkbook) {
/** do stuff with your new workbook here **/
});
}
}
"流" - 传入的有效负载通过 Stream.Readable 接口提供。如果有效负载为"多部分/表单数据"并且解析为 true,则字段值显示为文本,而文件作为流提供。来自"多部分/表单数据"上传的文件流也将具有包含文件名和标头属性的属性。
相关文章:
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 第一次点击动态创建的表后,点击不工作
- 我怎样才能让jQuery即使在尚未创建的对象上也能工作
- 如何在jquery中为object键创建一个工作变量以避免额外的代码
- Rails Production-可以工作,但不能编辑/删除/创建记录
- 在Alfresco中动态创建空间/文件夹的Javascript;t工作正确
- 是否有可能在 threejs 中创建一个工作的计算机界面
- 角度指令和属性Don'在控制器内创建和设置时无法工作
- 存储创建工作,存储定义不工作
- 为不在javascript中工作的动态创建类设置属性
- 我正在尝试创建一个可以在Internet Explorer(Windows 10,又名Edge)中工作的html语音到文
- 在Meteor中,我如何创建一个跨所有模板工作的通用事件处理程序
- 谷歌工作表中用于获取条目和创建日历事件的脚本示例
- 主页键和结束键don'在页面上创建弹出窗口时无法工作
- 为谷歌工作表创建一个自定义函数
- webkitAudioContext在iOS Safari上创建MediaElementSource不工作
- Excelljs - 如何从流创建工作表
- 怎么反对.用JavaScript创建工作
- 如何重新创建工作scrollspy示例
- 如何在沙盒框架中创建工作线程