//安装依赖
npm install --save xlsx file-saver
//在main 进行导入和依赖注入
// Excel导出库
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'
//依赖注入(任何一个子组件都可以使用)
app.provide('FileSaver', FileSaver);//全局发送api
app.provide('XLSX', XLSX);//全局发送api
在el-table 绑定一个id,下面函数里需要获取这个dom节点
//需要使用Excel导出功能的文件里使用
const $XLSX: any = inject('XLSX')//inject需要从vue中引入
const $FileSaver: any = inject('FileSaver')
// 表格数据写入excel,并导出为Excel文件
const exportTable = () => {
//导出名称
let excelName = "分销订单查询数据" + new Date().getTime() + ".xlsx";
const xlsxParam = { raw: true }; //转化成Excel使用原始格式
const table_book = $XLSX.utils.table_to_book(
document.querySelector("#order-table"),
xlsxParam
);
const table_write = $XLSX.write(table_book, {
bookType: "xlsx",
bookSST: true,
type: "array",
});
try {
$FileSaver.saveAs(
new Blob([table_write], { type: "application/octet-stream" }),
excelName
);
} catch (e) {
if (typeof console !== "undefined") console.log(e, table_write);
}
return table_write;
}
以上代码是获取table的当前页面的表格导出出去。如果碰到分页的数据,可以在点击导出按钮的事件函数里面先将current页码设置为1,每页显示的条目数设置为总量。调用一下接口,然后在await nextTick() 后面再写导出Excel的代码。导出完后在再还原页码。以上是我在公司遇到的业务逻辑是这样实现的。可能大家会碰到不同业务逻辑。希望以上demo能帮到大家。