纯前端实现 Excel 表格的读取与生成(json 转 xlsx,xlsx 转 json)
需求
利用现有的查询和新增接口,如何在不改后端的情况下给页面增加导入和导出功能?
前端查询到数据,可以生成 xlsx 文件吗?
前端可以读取用户选择的 xlsx 文件,然后调用新增接口向后端写入数据吗?
可以!
安装 xlsx 库
通过 npm 安装
1 | npm install xlsx |
或者通过 CDN 引入(不推荐)
1 | <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> |
我安装的是 0.18.5 版本
编写导入功能
1 | import { utils, read } from 'xlsx' |
通过以上方法得到的是一个 js Array 对象,表头会自动转化为对象键,表内容会自动转化为对象值,例如——
工号 | 姓名 |
---|---|
1000 | 张三 |
1001 | 李四 |
会被转换为——
1 | [ |
编写导出功能
1 | import { utils, writeFile } from 'xlsx' |
与前面的导入功能正好相反,导出时对象键会自动转化为表头,对象值会自动转化为表内容——
1 | [ |
会被转换为——
id | name |
---|---|
1000 | 张三 |
1001 | 李四 |
为了规范导出的表头,建议先通过 map 方法生成好导出对象结构,再调用导出方法——
1 | /** |
有意思的是,xlsx.writeFile
方法同时支持 node.js 和浏览器环境,在 node.js 环境运行会将文件写入当前路径,在浏览器环境运行会触发文件下载。
纯前端实现 Excel 表格的读取与生成(json 转 xlsx,xlsx 转 json)