Skip to content

Commit 763b31d

Browse files
llccingPanJiaChen
authored andcommitted
feature[Excel]: support export merged header export (#1718)
1 parent c963f56 commit 763b31d

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
@@ -18,20 +18,22 @@
1818
{{ scope.$index }}
1919
</template>
2020
</el-table-column>
21-
<el-table-column label="Title">
22-
<template slot-scope="scope">
23-
{{ scope.row.title }}
24-
</template>
25-
</el-table-column>
26-
<el-table-column label="Author" width="110" align="center">
27-
<template slot-scope="scope">
28-
<el-tag>{{ scope.row.author }}</el-tag>
29-
</template>
30-
</el-table-column>
31-
<el-table-column label="Readings" width="115" align="center">
32-
<template slot-scope="scope">
33-
{{ scope.row.pageviews }}
34-
</template>
21+
<el-table-column label="主要信息" align="center">
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>
36+
</el-table-column>
3537
</el-table-column>
3638
<el-table-column align="center" label="Date" width="220">
3739
<template slot-scope="scope">
@@ -79,13 +81,17 @@ export default {
7981
handleDownload() {
8082
this.downloadLoading = true
8183
import('@/vendor/Export2Excel').then(excel => {
82-
const tHeader = ['Id', 'Title', 'Author', 'Readings', 'Date']
84+
const multiHeader = [['Id', '主要信息', '', '', 'Date']]
85+
const tHeader = ['', 'Title', 'Author', 'Readings', '']
8386
const filterVal = ['id', 'title', 'author', 'pageviews', 'display_time']
8487
const list = this.list
8588
const data = this.formatJson(filterVal, list)
89+
const merges = ['A1:A2', 'B1:D1', 'E1:E2']
8690
excel.export_json_to_excel({
91+
multiHeader,
8792
header: tHeader,
8893
data,
94+
merges,
8995
filename: this.filename,
9096
autoWidth: this.autoWidth,
9197
bookType: this.bookType

0 commit comments

Comments
 (0)