Skip to content

Commit 3d973f7

Browse files
llccingPanJiaChen
authored andcommitted
feature[Excel]: support export merged header export (#1718)
1 parent b44335f commit 3d973f7

File tree

2 files changed

+35
-15
lines changed

2 files changed

+35
-15
lines changed

src/vendor/Export2Excel.js

+14
Original file line numberDiff line numberDiff line change
@@ -145,20 +145,34 @@ export function export_table_to_excel(id) {
145145
}
146146

147147
export function export_json_to_excel({
148+
multiHeader,
148149
header,
149150
data,
150151
filename,
152+
merges,
151153
autoWidth = true,
152154
bookType= 'xlsx'
153155
} = {}) {
154156
/* original data */
155157
filename = filename || 'excel-list'
156158
data = [...data]
157159
data.unshift(header);
160+
161+
for (let header of multiHeader) {
162+
data.unshift(header)
163+
}
164+
158165
var ws_name = "SheetJS";
159166
var wb = new Workbook(),
160167
ws = sheet_from_array_of_arrays(data);
161168

169+
if (merges.length > 0) {
170+
if (!ws['!merges']) ws['!merges'] = [];
171+
merges.forEach(item => {
172+
ws['!merges'].push(XLSX.utils.decode_range(item))
173+
})
174+
}
175+
162176
if (autoWidth) {
163177
/*设置worksheet每列的最大宽度*/
164178
const colWidth = data.map(row => row.map(val => {

src/views/excel/exportExcel.vue

+21-15
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,22 @@
1919
{{ scope.$index }}
2020
</template>
2121
</el-table-column>
22-
<el-table-column label="Title">
23-
<template slot-scope="scope">
24-
{{ scope.row.title }}
25-
</template>
26-
</el-table-column>
27-
<el-table-column label="Author" width="110" align="center">
28-
<template slot-scope="scope">
29-
<el-tag>{{ scope.row.author }}</el-tag>
30-
</template>
31-
</el-table-column>
32-
<el-table-column label="Readings" width="115" align="center">
33-
<template slot-scope="scope">
34-
{{ scope.row.pageviews }}
35-
</template>
22+
<el-table-column label="主要信息" align="center">
23+
<el-table-column label="Title">
24+
<template slot-scope="scope">
25+
{{ scope.row.title }}
26+
</template>
27+
</el-table-column>
28+
<el-table-column label="Author" width="110" align="center">
29+
<template slot-scope="scope">
30+
<el-tag>{{ scope.row.author }}</el-tag>
31+
</template>
32+
</el-table-column>
33+
<el-table-column label="Readings" width="115" align="center">
34+
<template slot-scope="scope">
35+
{{ scope.row.pageviews }}
36+
</template>
37+
</el-table-column>
3638
</el-table-column>
3739
<el-table-column align="center" label="Date" width="220">
3840
<template slot-scope="scope">
@@ -80,13 +82,17 @@ export default {
8082
handleDownload() {
8183
this.downloadLoading = true
8284
import('@/vendor/Export2Excel').then(excel => {
83-
const tHeader = ['Id', 'Title', 'Author', 'Readings', 'Date']
85+
const multiHeader = [['Id', '主要信息', '', '', 'Date']]
86+
const tHeader = ['', 'Title', 'Author', 'Readings', '']
8487
const filterVal = ['id', 'title', 'author', 'pageviews', 'display_time']
8588
const list = this.list
8689
const data = this.formatJson(filterVal, list)
90+
const merges = ['A1:A2', 'B1:D1', 'E1:E2']
8791
excel.export_json_to_excel({
92+
multiHeader,
8893
header: tHeader,
8994
data,
95+
merges,
9096
filename: this.filename,
9197
autoWidth: this.autoWidth,
9298
bookType: this.bookType

0 commit comments

Comments
 (0)