安装依赖
npm i xlsx
import * as XLSX from "xlsx";
let AllData = tableData;
let s2ab = (s) => {
let buf = new ArrayBuffer(s.length);
let view = new Uint8Array(buf);
for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
return buf;
};
let tableTitle = [
{ title: "订单编号" },
{ title: "关联课程" },
{ title: "用户名" },
{ title: "手机号" },
{ title: "订单金额" },
{ title: "下单时间" },
{ title: "订单状态" },
{ title: "退款金额" },
{ title: "退款备注" },
{ title: "场次开始日期" },
{ title: "场次结束日期" },
{ title: "订单备注" },
];
let charArray = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
];
let workbook = {
SheetNames: ["订单管理明细"],
Sheets: {
订单管理明细: {
"!merges": [
{
s: { c: 0, r: 0 },
e: { c: tableTitle.length - 1, r: 0 },
},
],
//宽度
"!cols": [
{ wch: 25 },
{ wch: 18 },
{ wch: 18 },
{ wch: 18 },
{ wch: 18 },
{ wch: 22 },
{ wch: 18 },
{ wch: 18 },
{ wch: 18 },
{ wch: 24 },
{ wch: 24 },
{ wch: 18 },
],
},
},
};
//第一层
workbook["Sheets"]["订单管理明细"]["A1"] = { v: "订单管理明细" };
//第二层 更新列表名
for (let i = 0; i < tableTitle.length; i++) {
let c = charArray[i];
workbook["Sheets"]["订单管理明细"][`${c}2`] = {
v: tableTitle[i].title,
};
}
let dataArray = AllData;
let dataArrayLength = dataArray.length;
if (dataArrayLength > 1000000) {
return;
}
//第三层 数据
for (let id = 0; id < dataArrayLength; id++) {
let lineNum = id + 3;
let data = dataArray[id];
let State = "";
if (data.state == 1) {
State = "已付款";
}
if (data.state == 2) {
State = "全额退款";
}
if (data.state == 3) {
State = "已完成";
}
if (data.state == 4) {
State = "已取消";
}
if (data.state == 5) {
State = "部分退款";
}
workbook["Sheets"]["订单管理明细"]["A" + lineNum] = {
v: data.orderCode,
};
workbook["Sheets"]["订单管理明细"]["B" + lineNum] = {
v: (data.course || {}).courseName,
};
workbook["Sheets"]["订单管理明细"]["C" + lineNum] = {
v: (data.member || {}).name,
};
workbook["Sheets"]["订单管理明细"]["D" + lineNum] = {
v: (data.member || {}).phone ? (data.member || {}).phone : "",
};
workbook["Sheets"]["订单管理明细"]["E" + lineNum] = { v: data.amount };
workbook["Sheets"]["订单管理明细"]["F" + lineNum] = {
v: data.orderTime,
};
workbook["Sheets"]["订单管理明细"]["G" + lineNum] = { v: State };
workbook["Sheets"]["订单管理明细"]["H" + lineNum] = {
v: data.refundAmount ? data.refundAmount : "",
};
workbook["Sheets"]["订单管理明细"]["I" + lineNum] = {
v: data.refundReason ? data.refundReason : "",
};
workbook["Sheets"]["订单管理明细"]["J" + lineNum] = {
v: data.calendarBeginDate,
};
workbook["Sheets"]["订单管理明细"]["K" + lineNum] = {
v: data.calendarEndDate,
};
workbook["Sheets"]["订单管理明细"]["L" + lineNum] = { v: data.remark };
}
workbook["Sheets"]["订单管理明细"]["!ref"] =
"A1:L" + (dataArrayLength + 10); //修改表格起效范围
//输出
let workbookOut = XLSX.write(workbook, {
bookType: "xlsx",
bookSST: false,
type: "binary",
});
//保存
let saveAs = (obj, fileName) => {
const a = document.createElement("a");
a.download = fileName || "下载";
a.href = URL.createObjectURL(obj);
a.click();
setTimeout(() => {
URL.revokeObjectURL(obj);
}, 100);
};
saveAs(
new Blob([s2ab(workbookOut)], { type: "application/octet-stream" }),
"订单管理明细.xlsx"
);