1212 <el-button slot =" trigger" size =" small" type =" primary" >选取文件</el-button >
1313 <div slot =" tip" class =" el-upload__tip" >只能上传 Excel 文件,且不超过 500kb</div >
1414 </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 >
1528 </div >
1629</template >
1730
@@ -20,7 +33,11 @@ import XLSX from 'xlsx'
2033export default {
2134 data () {
2235 return {
23- fileList: []
36+ fileList: [],
37+ upLoadNumber: 100000 ,
38+ tableTitle: ' ' ,
39+ tableData: [],
40+ tableHeader: ' '
2441 }
2542 },
2643 methods: {
@@ -67,9 +84,17 @@ export default {
6784 }
6885 const outdata = XLSX .utils .sheet_to_json (workbook .Sheets [workbook .SheetNames [0 ]])
6986 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 })
7095 // console.log(batteryArr)
7196 if (batteryArr .length > _this .upLoadNumber ) {
72- console .log (' 上传电芯数量不能超过6条 ' )
97+ console .log (' 不能超过 ' )
7398 resolve (false )
7499 } else {
75100 resolve (true )
@@ -80,6 +105,80 @@ export default {
80105 }
81106 reader .readAsBinaryString (file)
82107 })
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
83182 }
84183 }
85184}
0 commit comments