cod*_*ess 8 node.js express exceljs
我正在使用exceljs模块来创建excel文件.问题是它既没有被创建也没有被保存在路径中.
var excel = require('exceljs');
var options = {
filename: './streamed-workbook.xlsx',
useStyles: true,
useSharedStrings: true
};
var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
var sheet = workbook.addWorksheet('My Sheet');
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10 }
];
worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
worksheet.commit();
workbook.commit().then(function(){
console.log('xls file is written.');
});
Run Code Online (Sandbox Code Playgroud)
但是当我运行代码时没有任何反应.没有创建excel.我在这里错过了什么?
***********************编辑**************************对我的代码进行了以下更改,但仍然无法正常工作.
var Excel = require('exceljs');
var workbook = new Excel.Workbook();
var worksheet = workbook.addWorksheet('My Sheet');
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10 }
];
worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
workbook.commit();
workbook.xlsx.writeFile('./temp.xlsx').then(function() {
// done
console.log('file is written');
});
Run Code Online (Sandbox Code Playgroud)
为了将excel工作簿发送给客户端,您可以:
使用异步等待:
async function sendWorkbook(workbook, response) {
var fileName = 'FileName.xlsx';
response.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
await workbook.xlsx.write(response);
response.end();
}
Run Code Online (Sandbox Code Playgroud)
使用诺言:
function sendWorkbook(workbook, response) {
var fileName = 'FileName.xlsx';
response.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
workbook.xlsx.write(response).then(function(){
response.end();
});
}
Run Code Online (Sandbox Code Playgroud)
所以我发现我因为 workbook.commit() 而出错。我删除了提交,一切都开始像魅力一样工作。以下是创建和下载 excel 文件的完整工作代码:
注意:我正在使用一个名为tempfile的 npm 模块为创建的 excel 文件创建一个临时文件路径。然后会自动删除此文件路径。希望这可以帮助。
try {
var workbook = new Excel.Workbook();
var worksheet = workbook.addWorksheet('My Sheet');
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10 }
];
worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
var tempFilePath = tempfile('.xlsx');
workbook.xlsx.writeFile(tempFilePath).then(function() {
console.log('file is written');
res.sendFile(tempFilePath, function(err){
console.log('---------- error downloading file: ' + err);
});
});
} catch(err) {
console.log('OOOOOOO this is the error: ' + err);
}
Run Code Online (Sandbox Code Playgroud)
从这个链接https://github.com/exceljs/exceljs/issues/37得到答案
router.get('/createExcel', function (req, res, next) {
var workbook = new Excel.Workbook();
workbook.creator = 'Me';
workbook.lastModifiedBy = 'Her';
workbook.created = new Date(1985, 8, 30);
workbook.modified = new Date();
workbook.lastPrinted = new Date(2016, 9, 27);
workbook.properties.date1904 = true;
workbook.views = [
{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}
];
var worksheet = workbook.addWorksheet('My Sheet');
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'dob', width: 10, outlineLevel: 1, type: 'date', formulae: [new Date(2016, 0, 1)] }
];
worksheet.addRow({ id: 1, name: 'John Doe', dob: new Date(1970, 1, 1) });
worksheet.addRow({ id: 2, name: 'Jane Doe', dob: new Date(1965, 1, 7) });
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx");
workbook.xlsx.write(res)
.then(function (data) {
res.end();
console.log('File write done........');
});
}
Run Code Online (Sandbox Code Playgroud)
您的代码中有错误。
您已使用一个变量声明了“我的工作表”,并在整个代码中使用了不同的变量。
var Sheet = workbook.addWorksheet('我的工作表');
工作表.columns = [ { header: 'Id', key: 'id', width: 10 }, { header: 'Name', key: 'name', width: 32 }, { header: 'DOB', key: 'DOB',宽度:10 } ];
工作表.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
工作表.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
工作表.commit();
将变量Sheet更改为Worksheet。就像下面的代码一样
var worksheet = workbook.addWorksheet('我的工作表');
工作表.columns = [ { header: 'Id', key: 'id', width: 10 }, { header: 'Name', key: 'name', width: 32 }, { header: 'DOB', key: 'DOB',宽度:10 } ];
工作表.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
工作表.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
工作表.commit();
这应该可以解决你的问题。谢谢
| 归档时间: |
|
| 查看次数: |
20074 次 |
| 最近记录: |