一、下载excel模板文件
<template>
<a-button type="primary" @click="downloadExcel">下载Excel模板</a-button>
</template>
<script>
methods: {
downloadExcel () {
let a = document.createElement('a')
a.href = './templatefile.xlsx'
a.download = 'templatefile.xlsx'
a.style.display = 'none'
document.body.appendChild(a)
a.click()
a.remove()
}
}
</script>
二、excel读取及转换
定义方法
import XLSX from 'xlsx'
export const file2Xce = (file) => {
return new Promise(function (resolve, reject) {
const reader = new FileReader()
reader.readAsBinaryString(file)
reader.onload = function (e) {
const data = e.target.result
this.wb = XLSX.read(data, {
type: 'binary'
})
const result = []
this.wb.SheetNames.forEach(sheetName => {
result.push({
sheetName: sheetName,
sheet: XLSX.utils.sheet_to_json(this.wb.Sheets[sheetName])
})
})
resolve(result)
}
})
}
export const xyToFormat = (info) => {
let res = info[0].sheet
let xylist = []
let sliceList = []
let resList = []
for (let n = 0; n < res.length; n++) {
let obj = {}
let item = res[n]
if (item.x !== null && item.x !== undefined && item.y !== undefined && item.y !== null && typeof item.x === 'number' && typeof item.y === 'number') {
obj.x = item.x
obj.y = item.y
xylist.push(obj)
} else {
xylist = []
break
}
}
for (let i = 0; i < xylist.length; i++) {
for (let k = i + 1; k < xylist.length; k++) {
if (xylist[i].x === xylist[k].x && xylist[i].y === xylist[k].y) {
sliceList = xylist.slice(i, k + 1)
resList.push(sliceList)
}
}
}
if (sliceList.length !== 0) {
return resList
} else {
alert('文件错误')
return false
}
}
使用
<template>
<a-upload
:multiple="false"
:file-list="excelFileList"
:before-upload="excelBeforeUpload"
:disabled="enable"
>
<a-button><a-icon type="plus" />上传文件</a-button>
</a-upload>
</template>
<script>
methods: {
excelBeforeUpload (file) {
file2Xce(file).then((res) => {
if (xyToFormat(res)) {
this.zhList = xyToFormat(res)
this.$emit('excelBeforeUploadEmit', file, this.zhList)
} else {
this.zhList = []
}
})
return false
}
}
</script>