node导出的excel有两百万行,后端运用xlsx怎么处理,前端怎么下载
时间: 2024-01-22 07:02:01 浏览: 239
如果要导出大量数据的excel文件,建议使用流式写入的方式,将数据分批写入文件,避免一次性将所有数据加载到内存中导致内存溢出。可以使用Node.js中的`stream`模块来实现流式写入,同时使用`xlsx`模块来操作Excel文件。
以下是一个简单的示例代码,演示如何使用`stream`和`xlsx`模块来导出大量数据的excel文件:
```javascript
const fs = require('fs');
const xlsx = require('xlsx');
const { Readable } = require('stream');
// 生成测试数据,包含200万行
const data = [];
for (let i = 0; i < 2000000; i++) {
data.push({
id: i,
name: `Name${i}`,
age: Math.floor(Math.random() * 100)
});
}
// 创建一个可读流,并将数据写入其中
const stream = new Readable({
objectMode: true,
read() {}
});
data.forEach(row => {
stream.push(row);
});
stream.push(null); // 表示数据写入完成
// 创建Excel文件并写入数据
const wb = xlsx.utils.book_new();
const ws = xlsx.utils.json_to_sheet([], { header: ['ID', 'Name', 'Age'] });
xlsx.utils.book_append_sheet(wb, ws, 'Sheet1');
ws['!ref'] = `A1:C${data.length + 1}`; // 设置数据范围
const writer = xlsx.stream.to_csv(ws);
stream.pipe(writer);
// 将Excel文件流写入文件
const fileStream = fs.createWriteStream('data.xlsx');
writer.pipe(fileStream);
```
对于前端下载,可以使用浏览器的`download`属性来实现文件下载。将生成的Excel文件放在服务器上,前端通过发送HTTP请求获取文件并下载,示例代码如下:
```html
<a href="http://your-server.com/data.xlsx" download>Download Excel</a>
```
需要将`href`属性设置为Excel文件的下载链接,并添加`download`属性指示浏览器下载文件而不是打开文件。
阅读全文