element-ui导出excel
时间: 2023-10-30 19:08:01 浏览: 122
vue + element-ui实现简洁的导入导出功能
要使用element-ui导出excel,需要先安装依赖包:`npm install -S file-saver xlsx`,然后在代码中引入相关模块:
```javascript
import { export_json_to_excel } from '@/excel/Export2Excel'
import XLSX from 'xlsx'
import FileSaver from 'file-saver'
```
其中,`export_json_to_excel`是一个自定义的函数,用于将JSON数据导出为Excel文件。具体实现可以参考以下代码:
```javascript
export function export_json_to_excel(th, jsonData, defaultTitle) {
/* original data */
const data = jsonData
data.unshift(th)
const ws_name = 'SheetJS'
const wb = new Workbook()
const ws = sheet_from_array_of_arrays(data)
/* add worksheet to workbook */
wb.SheetNames.push(ws_name)
wb.Sheets[ws_name] = ws
const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' })
const title = defaultTitle || '列表'
saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), `${title}.xlsx`)
}
function sheet_from_array_of_arrays(data) {
const ws = {}
const range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } }
for (let R = 0; R !== data.length; ++R) {
for (let C = 0; C !== data[R].length; ++C) {
if (range.s.r > R) range.s.r = R
if (range.s.c > C) range.s.c = C
if (range.e.r < R) range.e.r = R
if (range.e.c < C) range.e.c = C
const cell = { v: data[R][C] }
if (cell.v == null) continue
const cell_ref = XLSX.utils.encode_cell({ c: C, r: R })
if (typeof cell.v === 'number') cell.t = 'n'
else if (typeof cell.v === 'boolean') cell.t = 'b'
else if (cell.v instanceof Date) {
cell.t = 'n'
cell.z = XLSX.SSF._table[14]
cell.v = datenum(cell.v)
} else cell.t = 's'
ws[cell_ref] = cell
}
}
if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range)
return ws
}
function Workbook() {
if (!(this instanceof Workbook)) return new Workbook()
this.SheetNames = []
this.Sheets = {}
}
function datenum(v, date1904) {
if (date1904) v += 1462
const epoch = Date.parse(v)
const excelEpoch = Date.parse('1900-01-01T00:00:00')
return (epoch - excelEpoch) / (24 * 60 * 60 * 1000)
}
function s2ab(s) {
const buf = new ArrayBuffer(s.length)
const view = new Uint8Array(buf)
for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
return buf
}
```
使用时,只需要调用`export_json_to_excel`函数即可:
```javascript
exportExcel() {
require.ensure([], () => {
const { export_json_to_excel } = require('@/excel/Export2Excel')
const tHeader = ['姓名', '年龄', '性别', '爱好', '地址']
const filterVal = ['name', 'age', 'sex', 'interest', 'address']
const list = this.tableData
const data = this.formatJson(filterVal, list)
export_json_to_excel(tHeader, data, '列表')
})
}
```
其中,`tHeader`是表头,`filterVal`是要导出的字段,`list`是要导出的数据。
阅读全文