2

我正在使用 ExcelJS 模块生成 Excel 文件,但难以实现所需的流程。

我想要的是:

  1. 用户单击前端(使用 React 构建)上的按钮以下载 Excel 文件。这会触发 fetch('/downloads/results') ,它是文件创建和服务的后端端点。
  2. 该文件已生成并作为 get 请求的 res 发送到 /downloads/results。
  3. 用户从前端的浏览器中获得下载提示,以便他们决定将其保存在哪里。

现在发生的情况是,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,但我有点被绊倒了。

感谢您提供的任何见解/方向!

4

0 回答 0