![](/img/trans.png)
[英]nodejs recursively call same api and write to excel file sequentially
[英]Write excel file to file stream with nodejs and download it with api call in browser
我遇到了如何將 excel 文件寫入文件流並在瀏覽器中下載的問題。我只能在服務器中創建新文件,但這不是我想要的。我不想在服務器上創建(如果它必須創建,然后我也想在用戶在瀏覽器中下載它時刪除它)。
但我無法實現下載..
所以一般的想法是我閱讀 csv 文件,而不是解析數據。
我還閱讀了一個模板 Excele 文件,我將其覆蓋並將其寫入文件 stream。 當我調用 get API 時,我就可以開始下載了(我稍后會將它集成到 Angular 應用程序中)..
我正在使用 Exceljs npm package。
我沒有任何錯誤,但代碼沒有按我的意願工作
我在 github 中上傳了整個代碼,因此您可以輕松查看代碼並復制我的代碼。
https://github.com/zigax1/mean-generate-download-excel/tree/master
我的 excel-builder 腳本:
export const generateExcel = async (req: Request, res: Response) => {
try {
await csvParse();
res.setHeader("Content-disposition", `attachment;`);
res.contentType(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
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;
}
);
});
});
};
謝謝大家!
const csv = require('fast-csv');
const fs = require('fs');
function exportCSVFile(res, path, data) {
const ws = fs.createWriteStream(path + ".csv");
ws.on("finish", function () {
res.download(path + ".csv", () => {
fs.unlinkSync(path + ".csv");
});
});
csv.write(data, {headers: true}).pipe(ws);
}
您使用此導出 csv function 進行回復
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.