vue + element-UI + export2excel 導出複雜table表格
multiHeader // 前两行的表头数据,二维数组,不够的用空白补全
merges //用於合併表格 如第一行的單位占excel表中 A1~B1 ,
multiHeader 與 header 應該可以合併,但本人沒有試過
handleExport() {
this.excelTable = this.list
if (!this.excelTable.length) {
this.$message.warning('暫無數據導出');
return false;
}
import('@/vendor/Export2Excel').then((excel) => {
const multiHeader =
[
['單位','', '廠區', '現有人數','', '', '', '','調班人數', '應到人數', '實到人數', '出勤比率', '缺勤人數','', '', '', '', '缺勤比率', '異動人數','', '', '','出差人數'], //第一行
['事業群', '單位','', '小計', '級','', '級','','', '', '', '','請假', '','曠工', '','小計','','新進', '調入', '調出', '離職',''] //第二行
] // 前两行的表头数据,二维数组,不够的用空白补全
const header = ['', '', '', '','直接人力', '間接人力', '非作業員', '作業員','', '', '', '','級', '級', '級', '級','', '', '', '','', '', ''] // 最后一行的表头数据
const filterVal = [ 'BEGP','Unit','FactoryArea','Subtotal','DManpower','JManpower',
'NonOpertor',
'Opertor',
'ShiftPerson',
'Response',
'RealTo',
'AttendanceRatio',
'AbsentDivision',
'AbsentLevel',
'abstainedDivision',
'abstainedLevel',
'SubtotalAbsence',
'AbsenceRate',
'newAdd',
'TransferIn',
'TransferOut',
'Resignation',
'NOBT']
const tableJsonList = this.excelTable
console.log(multiHeader)
const data = this.formatJson(filterVal, tableJsonList)
const merges = ['A1:B1', 'C1:C3', 'D1:H1', 'I1:I3', 'J1:J3', 'K1:K3', 'L1:L3', 'M1:Q1', 'R1:R3', 'S1:V1', 'W1:W3',
'A2:A3', 'B2:B3','D2:D3', 'E2:F2', 'G2:H2', 'M2:N2', 'O2:P2', 'Q2:Q3', 'S2:S3', 'T2:T3', 'U2:U3', 'V2:V3',
] // 合并单元格的数据,可根據在excel表格中占格數,A1:B1占橫兩格,D2:D3占豎兩格
excel.export_json_to_excel({
multiHeader,
header,
merges,
data,
filename: 'xxx表',
autoWidth: true,
bookType: 'xlsx'
})
})
},
formatJson(filterVal, tableJsonList) {
return tableJsonList.map((v) =>
filterVal.map((j) => {
return v[j];
})
);
},