12
12
<el-button slot =" trigger" size =" small" type =" primary" >选取文件</el-button >
13
13
<div slot =" tip" class =" el-upload__tip" >只能上传 Excel 文件,且不超过 500kb</div >
14
14
</el-upload >
15
+
16
+ <el-card class =" box-card" >
17
+ <div slot =" header" class =" clearfix" >
18
+ <span >数据预览</span >
19
+ </div >
20
+ <div class =" text item" >
21
+ <el-table :data =" tableData" border highlight-current-row style =" width : 100% ;" >
22
+ <el-table-column :label =" tableTitle" >
23
+ <el-table-column v-for =" item in tableHeader" :prop =" item" :label =" item" :key =" item" min-width =" 150" />
24
+ </el-table-column >
25
+ </el-table >
26
+ </div >
27
+ </el-card >
15
28
</div >
16
29
</template >
17
30
@@ -20,7 +33,11 @@ import XLSX from 'xlsx'
20
33
export default {
21
34
data () {
22
35
return {
23
- fileList: []
36
+ fileList: [],
37
+ upLoadNumber: 100000 ,
38
+ tableTitle: ' ' ,
39
+ tableData: [],
40
+ tableHeader: ' '
24
41
}
25
42
},
26
43
methods: {
@@ -67,9 +84,17 @@ export default {
67
84
}
68
85
const outdata = XLSX .utils .sheet_to_json (workbook .Sheets [workbook .SheetNames [0 ]])
69
86
console .log (outdata)
87
+ const tableTitle = workbook .SheetNames [0 ]
88
+ console .log (tableTitle)
89
+ const worksheet = workbook .Sheets [workbook .SheetNames [0 ]]
90
+ const header = _this .get_header_row (worksheet)
91
+ console .log (header)
92
+ const results = XLSX .utils .sheet_to_json (worksheet)
93
+ console .log (results)
94
+ _this .generateDate ({ tableTitle, header, results })
70
95
// console.log(batteryArr)
71
96
if (batteryArr .length > _this .upLoadNumber ) {
72
- console .log (' 上传电芯数量不能超过6条 ' )
97
+ console .log (' 不能超过 ' )
73
98
resolve (false )
74
99
} else {
75
100
resolve (true )
@@ -80,6 +105,80 @@ export default {
80
105
}
81
106
reader .readAsBinaryString (file)
82
107
})
108
+ },
109
+ generateDate ({ tableTitle, header, results }) {
110
+ console .log (tableTitle)
111
+ console .log (header)
112
+ console .log (results)
113
+ this .tableTitle = tableTitle
114
+ this .tableData = results
115
+ this .tableHeader = header
116
+ },
117
+ handleDrop (e ) {
118
+ e .stopPropagation ()
119
+ e .preventDefault ()
120
+ const files = e .dataTransfer .files
121
+ if (files .length !== 1 ) {
122
+ this .$message .error (' Only support uploading one file!' )
123
+ return
124
+ }
125
+ const itemFile = files[0 ] // only use files[0]
126
+ this .readerData (itemFile)
127
+ e .stopPropagation ()
128
+ e .preventDefault ()
129
+ },
130
+ handleDragover (e ) {
131
+ e .stopPropagation ()
132
+ e .preventDefault ()
133
+ e .dataTransfer .dropEffect = ' copy'
134
+ },
135
+ readerData (itemFile ) {
136
+ if (itemFile .name .split (' .' )[1 ] !== ' xls' && itemFile .name .split (' .' )[1 ] !== ' xlsx' ) {
137
+ this .$message ({ message: ' 上传文件格式错误,请上传xls、xlsx文件!' , type: ' warning' })
138
+ } else {
139
+ const reader = new FileReader ()
140
+ reader .onload = e => {
141
+ const data = e .target .result
142
+ const fixedData = this .fixdata (data)
143
+ // const fixedData = data
144
+ const workbook = XLSX .read (btoa (fixedData), { type: ' base64' })
145
+ const firstSheetName = workbook .SheetNames [0 ] // 第一张表 sheet1
146
+ console .log (firstSheetName)
147
+ const worksheet = workbook .Sheets [firstSheetName] // 读取sheet1表中的数据 delete worksheet['!merges']
148
+ const A_l = worksheet[' !ref' ].split (' :' )[1 ] // 当excel存在标题行时
149
+ worksheet[' !ref' ] = ` A2:${ A_l} `
150
+ const tableTitle = firstSheetName
151
+ const header = this .get_header_row (worksheet)
152
+ console .log (header)
153
+ const results = XLSX .utils .sheet_to_json (worksheet)
154
+ console .log (results)
155
+ this .generateDate ({ tableTitle, header, results })
156
+ }
157
+ reader .readAsArrayBuffer (itemFile)
158
+ }
159
+ },
160
+ fixdata (data ) {
161
+ let o = ' '
162
+ let l = 0
163
+ const w = 10240
164
+ for (l = 0 ; l < data .byteLength / w; ++ l) {
165
+ o += String .fromCharCode .apply (null , new Uint8Array (data .slice (l * w, l * w + w)))
166
+ o += String .fromCharCode .apply (null , new Uint8Array (data .slice (l * w)))
167
+ return o
168
+ }
169
+ },
170
+ get_header_row (sheet ) {
171
+ const headers = []
172
+ const range = XLSX .utils .decode_range (sheet[' !ref' ])
173
+ let C
174
+ const R = range .s .r /* start in the first row */
175
+ for (C = range .s .c ; C <= range .e .c ; ++ C ) { /* walk every column in the range */
176
+ var cell = sheet[XLSX .utils .encode_cell ({ c: C , r: R })] /* find the cell in the first row */
177
+ var hdr = ' UNKNOWN ' + C // <-- replace with your desired defaultif (cell && cell.t)
178
+ hdr = XLSX .utils .format_cell (cell)
179
+ headers .push (hdr)
180
+ }
181
+ return headers
83
182
}
84
183
}
85
184
}
0 commit comments