Skip to content

Commit 03e049b

Browse files
committed
fix(view): demo
1 parent 83142dc commit 03e049b

File tree

1 file changed

+101
-2
lines changed

1 file changed

+101
-2
lines changed

admin/src/views/home/excel.vue

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,19 @@
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'
2033
export 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

Comments
 (0)