Skip to content

Commit 22117ef

Browse files
committed
完成导入Excel组件,并封装好相应函数
1 parent 4f7b797 commit 22117ef

File tree

2 files changed

+60
-4
lines changed

2 files changed

+60
-4
lines changed

src/utils/excel.js

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function s2ab (s) {
4040
}
4141

4242
// 导出EXCEL表格
43-
export function exportDataFromExcel (
43+
export function exportDataToExcel (
4444
{
4545
header, // 表头名数组
4646
key, // 列对应字段数组
@@ -73,6 +73,39 @@ export function exportDataFromExcel (
7373
}), `${fileName}.${bookType}`)
7474
}
7575

76+
// 从Excel文件中获取表格头
77+
function getHeaderRow (sheet) {
78+
const headers = []
79+
// 将 A1:G8 这种字符串转换为行列对象
80+
const range = XLSX.utils.decode_range(sheet['!ref'])
81+
let C
82+
const R = range.s.r
83+
// 从第一列开始,遍历范围中的每一列
84+
for (C = range.s.c; C <= range.e.c; ++C) {
85+
// 将行列对象转换为 A1 这种字符串
86+
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
87+
// 用默认值替换
88+
let hdr = 'UNKNOWN ' + C
89+
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
90+
headers.push(hdr)
91+
}
92+
return headers
93+
}
94+
95+
// 读取Excel文件
96+
export function readDataFromExcel (data, type) {
97+
// 读取Excel文件并保存到Workbook对象
98+
const workbook = XLSX.read(data, { type: type })
99+
const firstSheetName = workbook.SheetNames[0]
100+
// 获取Workbook对象的worksheet
101+
const worksheet = workbook.Sheets[firstSheetName]
102+
const header = getHeaderRow(worksheet)
103+
// 将worksheet转化成数组
104+
const results = XLSX.utils.sheet_to_json(worksheet)
105+
return { header, results }
106+
}
107+
76108
export default {
77-
exportDataFromExcel
109+
exportDataToExcel,
110+
readDataFromExcel
78111
}

src/views/excel/ImportExcel.vue

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,45 @@
77
<p>github地址:访问 <el-link type="success" href="https://github.com/SheetJS/sheetjs" target="_blank">JS-xlsx</el-link></p>
88
</template>
99
</Hints>
10+
<el-card shadow="always">
11+
<UploadExcel @on-success="handleSuccess"/>
12+
<el-table
13+
:data="tableData"
14+
tooltip-effect="dark"
15+
style="width: 100%"
16+
size="medium">
17+
<el-table-column v-for="item in tableHeader" :key="item" :prop="item" :label="item" align="center"/>
18+
</el-table>
19+
</el-card>
1020
</div>
1121
</template>
1222

1323
<script>
24+
import UploadExcel from '../../components/UploadExcel'
1425
import Hints from '../../components/Hints/index'
1526
1627
export default {
1728
name: 'ImportExcel',
18-
components: { Hints }
29+
data () {
30+
return {
31+
tableHeader: [],
32+
tableData: []
33+
}
34+
},
35+
components: { UploadExcel, Hints },
36+
methods: {
37+
handleSuccess ({ header, results }) {
38+
this.tableHeader = header
39+
this.tableData = results
40+
}
41+
}
1942
}
2043
</script>
2144

2245
<style lang="less">
2346
.import-excel-wrapper {
2447
.el-card{
25-
min-height: 500px;
48+
min-height: 400px;
2649
}
2750
.search-form {
2851
padding-top: 18px;

0 commit comments

Comments
 (0)