一、下载依赖
npm install xlsx -D
二、Excel表格上传解析
// 上传excel
async handle(ev) {
let file = ev.raw
if (!file) return
// 读取file的数据
let data = await this.readFile(file)
let workbook = xlsx.read(data, { type: "binary" })
let worksheet = workbook.Sheets[workbook.SheetNames[1]]
data = xlsx.utils.sheet_to_json(worksheet)
// 把读取出来的数据变为最后可以传递给服务器的数据
let arr = []
data.forEach(item => {
let obj = {}
for(let key in this.character) {
if (!this.character.hasOwnProperty(key)) break
let v = this.character[key],
text = v.text,
type = v.type
v = item[text] || ''
type === 'string' ? (v = String(v)) : null
type === 'number' ? (v = Number(v)) : null
obj[key] = v
}
arr.push(obj)
});
},
// 把文件进行二进制读取
readFile(file) {
return new Promise(resolve => {
let reader = new FileReader()
reader.readAsBinaryString(file)
reader.onload = ev => {
resolve(ev.target.result)
}
})
}
三、Excel导出
// 数据导出
exportData() {
let arr = this.list.map(item => {
return {
‘空间编码’: item.title1,
‘空间名称’: item.title2,
‘空间别称’: item.title3,
‘空间类型名称’: item.title4,
‘项目名称’: item.title5,
‘空间位置’: item.title6,
‘楼层名称’: item.title7,
‘朝向’: item.title8,
‘内外’: item.title9,
‘交付日期’: item.title10,
‘是否黏贴二维码’: item.title11,
‘移交日期’: item.title12,
‘是否移交供电局管理’: item.title13,
‘数据状态’: item.title14,
}
})
let sheet = xlsx.utils.json_to_sheet(arr),
book = xlsx.utils.book_new()
xlsx.utils.book_append_sheet(book, sheet, ‘公共空间’)
xlsx.writeFile(book, user${new Date().getTime()}.xls
)
console.log(’【arr】:’, arr)
}