借助xlsx实现js读取处理excel数据,并输出excel文件
<input type="file" @change="fn" />
import * as XLSX from 'xlsx'
fn(e){
let fileObj=e.target.files[0]
const fileReader=new FileReader()
fileReader.readAsArrayBuffer(fileObj)
fileReader.onload=(event)=>{
const fileData=event.target.result
const workbook=XLSX.read(fileData,{
type:'binary'
})
const wsname=workbook.SheetNames[0]
const sheetJson=XLSX.utils.sheet_to_json(workbook.Sheets[wsname])
const data=[]
let errindex=0
for(let item of sheetJson){
const obj={
bookNum:item.书号,
price:item.定价,
publish:item.出版社
}
if(item.商品名称.includes('代替')){
if(item.商品名称.match(/-\d+\s+(.*)(代替/)){
obj.name=item.商品名称.match(/-\d+\s+(.*)(代替/)[1].trim()
if(errindex<5){
console.log(item.商品名称.match(/-\d+\s+(.*)(代替/))
}
if(item.商品名称.match(/(代替(.*)[)|\)]/)){
obj.cancel=item.商品名称.match(/(代替(.*)[)|\)]/)[1]
}else{
obj.err=obj.err+'代替号识别出错'
console.log('代替号识别出错',errindex+2,item.商品名称)
}
}else{
obj.err=obj.err+'商品名称识别错误'
// console.log('商品名称识别错误行数'+(errindex+2))
// console.log(item.商品名称)
}
}else{
if(item.商品名称.match(/-\d+(.*)/)){
if(errindex<5){
console.log(item.商品名称.match(/-\d+(.*)/)[1])
}
obj.name=item.商品名称.match(/-\d+(.*)/)[1].trim()
obj.cancel=''
}else{
obj.err=obj.err+'商品名称识别错误'
// console.log('商品名称识别错误行数'+(errindex+2))
// console.log(item.商品名称)
}
}
errindex++
data.push(obj)
}
// 新建空workbook,然后加入worksheet
const ws = XLSX.utils.json_to_sheet(data)
// 设置每列的列宽,10代表10个字符,注意中文占2个字符
ws['!cols'] = [
{ wch: 25 },
{ wch: 25 },
{ wch: 25 },
{ wch: 25 },
{ wch: 25 },
{ wch: 40 },
{ wch: 25 },
]
// 新建book
const wb = XLSX.utils.book_new()
// 生成xlsx文件(book,sheet数据,sheet命名)
XLSX.utils.book_append_sheet(wb, ws, '数据详情')
// 写文件(book,xlsx文件名称)
XLSX.writeFile(wb, '数据详情终版.xlsx')
}
}
标签:XLSX,const,处理,fileReader,excel,js,item
From: https://www.cnblogs.com/772330747wh/p/18001189