方式一:使用xlsx插件
- 在项目中引入xlsx插件:npm install xlsx -S
- 点击项目中的“导出”按钮,调用我们自己定义的方法
- 原文地址:(vue2.x 实现纯前端导出excel - 掘金 (juejin.cn))
import excel from '@/utils/ExportExcel';
handleExport() {
const params = {
title: [''],
key: [''],
data: [],
autoWidth: true,
filename: '进行保存的文件名',
};
excel.exportArrayToExcel(params);
}
import * as XLSX from 'xlsx';
function autoWidthFunc(ws: any, data: any) {
const colWidth = data.map((row: any) =>
row.map((val: any) => {
const reg = new RegExp('[\\u4E00-\\u9FFF]+', 'g');
if (val == null) {
return { wch: 10 };
} else if (reg.test(val)) {
return { wch: val.toString().length * 2 };
} else {
return { wch: val.toString().length };
}
})
);
const result = colWidth[0];
for (let i = 1; i < colWidth.length; i++) {
for (let j = 0; j < colWidth[i].length; j++) {
if (result[j].wch < colWidth[i][j].wch) {
result[j].wch = colWidth[i][j].wch;
}
}
}
ws['!cols'] = result;
}
function jsonToArray(key: any, jsonData: any) {
return jsonData.map((v: any) =>
key.map((j: any) => {
return v[j];
})
);
}
const exportArrayToExcel = ({ key, data, title, filename, autoWidth }: any) => {
const wb = XLSX.utils.book_new();
const arr = jsonToArray(key, data);
arr.unshift(title);
const ws = XLSX.utils.aoa_to_sheet(arr);
if (autoWidth) {
autoWidthFunc(ws, arr);
}
XLSX.utils.book_append_sheet(wb, ws, filename);
XLSX.writeFile(wb, filename + '.xlsx');
};
export default {
exportArrayToExcel,
};
方式二:使用vue-json-excel插件
- 安装插件:npm install vue-json-excel -S
- 在main.js中引入
- 原文地址:vue导出excel表格(详细教程)_vue前端导出excel表格_前端小脑虎的博客-CSDN博客
import JsonExcel from 'vue-json-excel'
Vue.component('downloadExcel', JsonExcel)
- 将“导出”按钮包裹在上述的全局组件中
- data:表格数据
- fields: 表头数据(是个对象,相当于上述的key和title的结合体)
- header: 表格标题(一般没有)
- name: 下载的文件名
<download-excel
:data="data"
:fields="filelds"
:header="title"
:name="保存下载的文件名">
<el-button>导出</el-button>
</download-excel>
data: [
{
name:'张三',
age: '18'
},
{
name:'李四',
age: '20'
},
{
name:'王五',
age:'17'
}
]
fields: {
name:'姓名',
age:'年龄'
}
方式三:使用xlsx和file-saver
- 安装插件
- npm install xlsx -S
- npm instlal file-saver -S
- 引入插件
- import * as XLSX from 'xlsx'
- import FileSaver from 'file-saver'
const jsonWorkSheet = xlsx.utils.json_to_sheet(array);
const workBook: WorkBook = {
SheetNames: ['sheet名称'],
Sheets: {
['sheet名称']: jsonWorkSheet,
}
};
const workBook = XLSX.utils.table_to_book(document.querySelector(".table"));
const wb = XLSX.write(workBook,{
bookType: "xlsx",
bookSST: true,
type: "array"
})
XLSX.writeFile(workBook, '文件名');
FileSaver.saveAs(
new Blob([wb], { type: 'application/octet-stream', }), '文件名.xlsx',
);