使用我的NodeJS API,我想要下载一个excel文件。我使用的是卓越的npm软件包。
所以我的想法是:我想读取csv文件并解析数据,之后我还想读取一个excel模板文件,然后用csv的数据填充这个excel文件。最后,我还想下载这个新的excel文件。
在第一个函数中,我设置标头并调用函数csvParse();在csvParse()函数中,我读取csv文件并解析它,在解析数据时,我调用函数generateFile();在generateFile()函数中,我读取模板文件,然后将其写回有更改内容的流(我还没有更改内容,但在实际下载正确的文件时会这样做)。
我不知道我做错了什么。
export const generateExcel = async (req: Request, res: Response) => {
try {
res.setHeader("Content-disposition", "attachment; filename=" + "Report.xlsx");
res.contentType(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
await csvParse();
return res.status(200).json("Success");
} catch (err) {
return res.status(500).json("False");
}
};
const csvParse = async () => {
fs.createReadStream("./content/TestCsv.csv")
.pipe(csv.parse())
.on("error", (error: any) => console.log("Error"))
.on("data", (row: any) => {
let line: any = String(row);
line = line.split(";");
//let parsedData = line[0];
let parsedData = line;
allParsedData.push(parsedData);
})
.on("end", (rowCount: any) => {
let test = allParsedData.toString();
generateFile(test);
});
};
const generateFile = (data: any) => {
return new Promise<fs.ReadStream>((resolve, reject) => {
const workbook = new Excel.Workbook();
workbook.xlsx.readFile("./utilities/template.xlsx").then(() => {
workbook.xlsx.writeFile("./content/Test.xlsx").then(
() => {
let stream = fs.createReadStream("./content/Test.xlsx");
stream.on("close", () => {
fs.unlink("./content/Test.xlsx", (error) => {
if (error) {
throw error;
}
});
});
resolve(stream);
},
(err) => {
throw err;
}
);
});
});
};所以用我的代码我可以下载一个文件,但是它已经损坏了。如果我将下载的文件更改为csv,则该文件的内容仅为字符串"Success“。
源代码: https://github.com/zigax1/mean-generate-download-excel/tree/master
发布于 2022-08-16 09:14:46
在发送文件时,需要设置响应类型。
return res.type("application/octet-stream").status(200).send(data);数据为const file = await book.xlsx.writeBuffer();缓冲区类型。
https://stackoverflow.com/questions/73370467
复制相似问题