以前写文章介绍了使用 js-xlsx 实现导入 excel 的功能,如今再介绍一下如何使用 js-xlsx 进行 excel 导出。html
【实现步骤】git
1. 首先安装依赖github
npm install xlsx --save
2. 在组件中导入 xlsxweb
import XLSX from 'xlsx';
3. 提供导出按钮,编写导出方法npm
<Button type='primary' onClick={this.handleExport}>EXCEL 导出</Button>
handleExport = () => { const sheetData1 = data1.map(item => ({ 'ID': item.id, '收件人': item.name, '手机号': item.phone, '扫描时间': item.scanTime, })); // 支持多 sheet // const sheetData2 = data2.map(item => ({ // // 在这里设置表头和对应项的值 // })); // const sheetData3 = data3.map(item => ({ // // 在这里设置表头和对应项的值 // })); // ... const sheet1 = XLSX.utils.json_to_sheet(sheetData1); // 支持多 sheet // const sheet2 = XLSX.utils.json_to_sheet(sheetData2); // const sheet3 = XLSX.utils.json_to_sheet(sheetData3); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, sheet1, '收件人列表'); // 支持多 sheet // XLSX.utils.book_append_sheet(wb, sheet2, '表格 sheet2'); // XLSX.utils.book_append_sheet(wb, sheet2, '表格 sheet2'); const workbookBlob = workbook2blob(wb); // 导出最后的总表 openDownloadDialog(workbookBlob, '收件人列表.xlsx'); }
注:要导出数据的 json 格式应该是这样的(每一个对象表明表格中的一行数据)json
[{ id: '1', name: '张三丰', phone: '16834567890', }, { // ... }]
【效果演示】浏览器
点击右上角导出按钮,浏览器会自动下载表格文件,以下:app
打开表格,查看数据,发现页面中的表格数据和导出内容一致,而且已经按照设置的中文字段显示了。ide
【问题解决】post
1. 若是在导出过程当中浏览器报错:XLSX.utils.json_to_sheet is not a function , 多是由于 xlsx 版本问题致使的,在调用 XLSX.utils.json_to_sheet() 方法前尝试 打印 xlsx 的版本号:
console.log(XLSX.version)
通过简单排查,应该是 0.8.8 如下版本不支持 json_to_sheet() 方法,因此直接升级 xlsx 到最新版(目前是 0.14.5 )就能够了。
npm install xlsx@0.14.5 --save
2. 以上只演示了单个 sheet 导出的实现和效果,而且简单给出了多 sheet 导出的实现方案( handleExport 方法中注释部分),关于多 sheet 导出更详细的实现方案,参考 展现 用xlsx库 导出excel,含多个sheet。
3. 如何经过 xlsx 实现 excel 的导入和解析,参考 React读取Excel——js-xlsx 插件的使用。
【参考资料】
1.