在原项目上增加
- 子表头导出支持, 并支持自动合并单元格
- 文件使用相对路径, 方便直接复制及引用
- 多sheet表格导出
- 增加前端解析excel为JSON
引言:
最近使用vue在做一个后台系统,技术栈 vue + iView
,在页面中生成表格后,
iView可以实现表格的导出,不过只能导出csv格式的,并不适合项目需求。
- 复制代码到本地
npm install -S file-saver
用来生成文件的web应用程序npm install -S xlsx
电子表格格式的解析器
- 渲染页面中的表结构是由
columns
列 和tableData
行,来渲染的columns
为表头数据tableData
为表实体内容
columns1: [
{
title: '序号',
exportable: true,
key: 'serNum'
},
{
title: '总表头1',
key: 'column1',
children:[{
align: 'center',
exportable: true,
title: '分表头1',
key: 'subColumn1'
}]
}
...
],
tableData 就不写了,具体数据结构查看iViewAPI
在build 目录下webpack.base.conf.js
配置 我们要加载时的路径
alias: {
'src': path.resolve(__dirname, '../src'),
}
在当前页面中引入依赖
import { downloadExcel, downloadExcelSheet } from './table2excel.js'
import { excel2Json } from './excelUtil.js'
当我们要导出表格执行@click
事件调用handleDownload
函数
导入文件将Upload组建的:before-upload调用uploadPriceList, action="#"
handleDownload() {
// 单表格文件
downloadExcel('表名', this.columnsData, this.tableData)
// 多表格文件
let sheets = [
{columnsData: [...], tableData: [...], title: 'SheetName'}
]
downloadExcelSheet(sheets, '文件名')
}
uploadPriceList(file) {
excel2Json(file, (result) => {
// process jsonData, result= {sheetName:[{column1: ..., column2:... }, ...]}
...
})
}