【发布时间】:2017-12-28 20:59:23
【问题描述】:
我正在尝试使用 excelbuilder 创建一个 excel 工作簿,并使用 mysql 数据库中的信息填充数据。这是我的get方法:
app.get('/excel', function(req, res) {
var locationSpread = ['location1.xlsx', 'location2.xlsx',
'location3.xlsx'];
locationSpread.forEach(function(filename) {
fs.unlink("./Spreadsheets/" + filename, (err) => {
if (err) {
console.log('Spreadsheet ' + filename + ' not found');
} else {
console.log('Spreadsheet ' + filename + ' successfully found');
}
});
var query = connection.query('SELECT * from ' + filename.slice(0, -5), function(err, rows) {
var workbook = excelbuilder.createWorkbook('./Spreadsheets/', filename);
var sheet = workbook.createSheet(filename.slice(0, -5), 3, rows.length);
sheet.set(1, 1, 'First Name');
sheet.set(2, 1, 'Last Name');
sheet.set(3, 1, 'Company');
*** TROUBLE CODE START HERE ***
for (var j = 2, z = 0; z < rows.length; j++, z++) {
sheet.set(1, j, rows[z].firstName);
sheet.set(2, j, rows[z].lastName);
sheet.set(3, j, rows[z].company);
}
*** TROUBLE CODE END HERE ***
workbook.save(function(err) {
console.log('workbook saved ' + (err ? 'failed' : 'ok'));
});
});
});
});
如果文件存在于电子表格文件夹中,我要做的第一件事是删除它们。然后我根据位置查询数据库。我创建了一个新的工作簿和工作表,然后写入它。 for 循环中断了程序,而错误是:
TypeError: Cannot read property '1' of undefined
我相信它是异步的东西
【问题讨论】:
-
你在哪里使用异步?你确定不是
sheet.set(1, ...这行错误的原因吗?可以贴一下异常的调用栈吗? -
错误可以在这里看到:pastebin.com/gKpBvUQx 但本质上,如果我要在没有 for 循环的情况下运行这段代码,它会完美运行。
标签: mysql node.js excel async.js