需求说明:展示在页面上的表格 点击导出按钮 自动下载为excel表格


纯前端实现:
此方法用到是的一个数据处理库SheetJS Overview | SheetJS Community Edition
使用方法在此未作说明
1.给导出按钮绑定函数customHeader
function customHeader() {
jsonToSheetXlsx({
data: data.value,
header: {
returnDateTime: '应还车时间',
orderNo: '订单编号',
userName: '姓名',
number: '手机号',
carType: '车辆类型',
licensePlate: '车牌号码',
account: '账户金额',
},
filename: '订单到期数明细.xlsx',
});
}
组件库里封装jsonToSheetXlsx函数
import * as xlsx from 'xlsx';
import type { WorkBook } from 'xlsx';
const { utils, writeFile } = xlsx;
import type { JsonToSheet } from './typing';
const DEF_FILE_NAME = 'excel-list.xlsx';
export function jsonToSheetXlsx<T = any>({
data,
header,
filename = DEF_FILE_NAME,
json2sheetOpts = {},
write2excelOpts = { bookType: 'xlsx' },
}: JsonToSheet<T>) {
const arrData = [...data];
if (header) {
arrData.unshift(header);
json2sheetOpts.skipHeader = true;
}
const worksheet = utils.json_to_sheet(arrData, json2sheetOpts);
/* add worksheet to workbook */
const workbook: WorkBook = {
SheetNames: [filename],
Sheets: {
[filename]: worksheet,
},
};
/* output format determined by filename */
writeFile(workbook, filename, write2excelOpts);
/* at this point, out.xlsb will have been downloaded */
}
./typing 文件
import type { JSON2SheetOpts, WritingOptions} from 'xlsx';
export interface JsonToSheet<T = any> {
data: T[];
header?: T;
filename?: string;
json2sheetOpts?: JSON2SheetOpts;
write2excelOpts?: WritingOptions;
}
后端返回文件流

给导出按钮绑定函数customHeader
function customHeader() {
axios({
url: '后端接口',
headers: {
'Content-Type': 'application/json',
Authorization: Authorization.value//携带token
},
responseType: 'blob',
}).then(res => {
let a = document.createElement("a");
let blob = new Blob([res.data], { type: ".xlsx" });
let objectUrl = URL.createObjectURL(blob);
a.setAttribute("href", objectUrl);
a.setAttribute("download", "订单到期明细.xlsx");
a.click();
}).catch((error) => {
console.log(error);
})
}