需求:导出页面中的表格,格式是excel
1:下载excel依赖
npm install --save xlsx file-saver
2.新建一个js文件
在outToExcel.js中书写如下代码,直接cv就行
import FileSaver from 'file-saver';
import * as XLSX from 'xlsx'
export default {
// 导出Excel表格
exportExcel(name, tableName) {
//name表示生成excel的文件名 tableName表示表格的id
var sel = XLSX.utils.table_to_book(document.querySelector(tableName))
var selIn = XLSX.write(sel, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([selIn], { type: 'application/octet-stream' }), name)
} catch (e) {
if (typeof console !== 'undefined') console.log(e, selIn)
}
return selIn
}
};
3.在main.js文件中引入outToExcel.js
// 导出excel插件
import outToexcel from './assets/outToExcel'
Vue.prototype.outToExcel = outToexcel
4.在页面中找到定义的table 我这里用的是element-ui的表格,给它绑定id
<el-table
stripe
border
:data="tableData"
style="width: 100%"
height="300"
id="vcfResult"
>
5.页面上定义一个按钮,设定导出excel图表事件
<el-button
@click="exportExcel()"
type="warning"
plain
icon="el-icon-download"
size="mini"
style="margin-right: 5px"
>导出表格
</el-button>
在methods中触发导出表格的按钮事件
exportExcel() {
this.outToExcel.exportExcel("表格名字.xlsx","#vcfResult");
//第一个引号里面是表格导出时的名字
//第二个是表格的id,这个插件是通过id导出的
},
这样就可以成功导出表格了
提示
如果使用Element-UI组件, 导出Table表格可能报错 TypeError: Cannot read properties of undefined (reading ‘utils‘)
解决办法:把import XLSX from 'xlsx’变成import * as XLSX from ‘xlsx’
如果导出发现导出了两个同样的表格,原因是table使用了fixed属性固定列,导出表格时会出现导出两次的问题
解决办法:修改outToExecel.js文件内容为
import FileSaver from 'file-saver';
import * as XLSX from 'xlsx'
export default {
// 导出Excel表格
exportExcel(name, tableName) {
//name表示生成excel的文件名 tableName表示表格的id
var xlsxParam = { raw: true }
let fix = document.querySelector(".el-table__fixed");
let sel
if (fix) {
sel = XLSX.utils.table_to_book(
document.querySelector(tableName).removeChild(fix)
)
sel.wrapText = 1
sel["Sheets"]["Sheet1"]["!cols"] = [
{ wpx: 40 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
];
document.querySelector(tableName).appendChild(fix);
} else {
sel = XLSX.utils.table_to_book(document.querySelector(tableName), xlsxParam)
}
var selIn = XLSX.write(sel, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([selIn], { type: 'application/octet-stream' }), name)
} catch (e) {
if (typeof console !== 'undefined') console.log(e, selIn)
}
return selIn
}
};