纯前端下载table为excel至本地
需求描述:
其实需求很简单,因为页面已经有数据,所以可以直接拿到数据然后下载至本地。所以这个过程不需要后端了。
需要的依赖包:xlsx
直接在项目终端下载该包 yarn add xlsx
,或者用npm
下载都行,看你项目怎么启动的。
导出excel的逻辑:
excel
整个表格专业名词是workbook
,里面每张表格是sheet
- 把数据生成sheet,
const sheet = xlsx.utils.json_to_sheet(array)
,json_to_sheet
是将由对象组成的数组转化成sheet
- 创建虚拟的
workBook
,把sheet
添加到workbook
中 xlsx
的xlsx.writeFile
帮我们把写好的excel
直接下载
实现代码:
导出数据为excel
的功能的函数:
import xlsx from 'xlsx';
/*
* 导出 excel 文件
* @param array JSON 数组
* @param sheetName 第一张表名
* @param fileName 文件名
*/
export function exportExcelFile(array, sheetName, fileName ) {
console.log(array);
const jsonWorkSheet = xlsx.utils.json_to_sheet(array);
console.log('jsonWorkSheet', jsonWorkSheet);
const workBook = {
SheetNames: [sheetName],
Sheets: {
[sheetName]: jsonWorkSheet,
}
};
console.log('workBook', workBook);
return xlsx.writeFile(workBook, fileName);
}
引用该功能:
<Button
style={{ marginLeft: '20px' }}
disabled={dataSource.length === 0}
type="primary"
onClick={ () => {
let sheetName = '表1';
let fileName = 'example.xlsx';
exportExcelFile(dataSource, sheetName, fileName);
}}
>
下载数据
</Button>
实现过程:
- 如果这是网页上显示的表格:
这是以数组的形式传入到exportExcelFile
函数中。
- 转化为
sheet
后:
- 转为
workbook
后:
因为一张workBook
即一个excel
表可能有多个sheet
表,我这边只做了一个sheet
,所以存在了数组0
中。
- 下载的表格: