我正在使用 ExcelJS 模块生成 Excel 文件,但难以实现所需的流程。
我想要的是:
- 用户单击前端(使用 React 构建)上的按钮以下载 Excel 文件。这会触发 fetch('/downloads/results') ,它是文件创建和服务的后端端点。
- 该文件已生成并作为 get 请求的 res 发送到 /downloads/results。
- 用户从前端的浏览器中获得下载提示,以便他们决定将其保存在哪里。
现在发生的情况是,Node 只是在与服务器文件相同的文件夹中创建 Excel 文件,而不是在前端提示用户。创建文件的代码是“workbook.xlsx.writeFile('Project.xlsx')”
我当前的代码如下。
相关的服务器端代码块:
function generateSpreadsheet(req, res) {
const workbook = new Excel.Workbook();
workbook.creator = 'Project';
workbook.created = new Date();
const worksheet = workbook.addWorksheet("Definitions");
worksheet.columns = [
{ header: 'Word', key: 'word', width: 36 },
{ header: 'Definition', key: 'def', width: 120 }
];
worksheet.addRows(storedResults);
workbook.xlsx.writeFile('Project.xlsx');
}
app.get('/downloads/results', (req, res) => {
try {
generateSpreadsheet();
} catch(err) {
console.log(err);
}
})
相关前端代码:
renderDownloadButton() {
if (this.state.queriesList.length > 0) {
return (
<button onClick={this.download}>
Export Results
</button>
)
}
}
download() {
fetch('/downloads/results');
}
过去几天我一直在研究大部分时间,但还没有找到令人满意的解决方案。
我尝试让 generateSpreadsheet 函数返回一个流,以为我可以将它通过管道传输到 app.get 中的 res,但我有点被绊倒了。
感谢您提供的任何见解/方向!