我正在尝试使用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'));
});
});
});
});
我要做的第一件事是删除文件夹Spreadsheets中存在的文件。然后我根据位置查询数据库。我创建一个新的工作簿和工作表然后写入它。 for循环打破了程序,错误是:
TypeError: Cannot read property '1' of undefined
我认为这是异步
的内容答案 0 :(得分:0)
我在这里看到的一个可能的错误是您正在使用unlink
的异步版本。可能,如果在尝试创建工作簿时未删除该文件,则可能会发生错误。
您可以尝试切换到unlinkSync
并在创建工作表之前验证workbook
对象不为空(并且作为额外的预防措施,在设置值之前sheet
对象不为null )。
除此之外,如果没有错误堆叠,就无法进一步提供帮助。
答案 1 :(得分:0)
因此错误是由于初始设置错误。基本上,createWorkbook具有初始的行数和列数,如果您碰巧尝试写出超出最初创建的值的值,则会抛出错误。因此,为什么我的for循环继续崩溃。