我遵循了basic usage tutorial for excel4node软件包。
为了运行代码,我有一个https函数,它将在本地系统上与Excel.xlsx
所在的目录中创建一个index.js
文件。
但是,问题是,每次我调用该函数时,都会创建一个零字节的Excel.xls
文件。
功能体是这样的:
const createXlxsFile = (req, res) => {
const xl = require('excel4node');
// Create a new instance of a Workbook class
const workbook = new xl.Workbook();
// Add Worksheets to the workbook
const worksheet = workbook.addWorksheet('Sheet 1');
const worksheet2 = workbook.addWorksheet('Sheet 2');
// Create a reusable style
const style = workbook.createStyle({
font: {
color: '#FF0800',
size: 12
},
numberFormat: '$#,##0.00; ($#,##0.00); -'
});
// Set value of cell A1 to 100 as a number type styled with paramaters of style
worksheet.cell(1, 1).number(100).style(style);
// Set value of cell B1 to 300 as a number type styled with paramaters of style
worksheet.cell(1, 2).number(200).style(style);
// Set value of cell C1 to a formula styled with paramaters of style
worksheet.cell(1, 3).formula('A1 + B1').style(style);
// Set value of cell A2 to 'string' styled with paramaters of style
worksheet.cell(2, 1).string('string').style(style);
// Set value of cell A3 to true as a boolean type styled with paramaters of style but with an adjustment to the font size.
worksheet.cell(3, 1).bool(true).style(style).style({ font: { size: 14 } });
workbook.write('Excel.xlsx');
res.end('DOC CREATED');
};
此代码可与标准Node.js正常运行,但不适用于Firebase云功能。使用功能编写文件是否有限制?
即使使用Xlsx-populate package,我也遇到同样的问题。
答案 0 :(得分:2)
好。找出问题所在。
问题是云功能不允许您写入操作系统中的任何目录。
您唯一有权访问的地方是云功能中的/tmp
。
但是,在本地PC上,这也会崩溃(在Windows 10中测试)。可能是因为我没有创建C:/tmp
文件夹。
要解决此问题,可以在Node.js中使用tmpdir()
模块的os
方法
const os = require('os');
const path = require('path');
const pathToSave = path.join(os.tmpdir(), 'Excel.xlsx');
在部署代码时,您需要将os.tmpdir()
替换为`/ tmp'。
const pathToSave = path.join('/tmp', 'Excel.xlsx');
我希望这会有所帮助。
答案 1 :(得分:1)
workbook.write('Excel.xlsx');
是异步的。文档说它需要一个回调,该回调在完成后被调用。使用它终止功能。现在,您要在写入完成之前提早终止。
wb.write();
write()方法可以接受单个文件名,即 带有回调函数或HTTP响应对象的文件名。
wb.write('ExcelFile.xlsx', function (err, stats) {
if (err) {
res.send(500);
} else {
res.end('DOC CREATED');
}
});
看来这也可能起作用:
wb.write('ExcelFile.xlsx', res);