js处理excel数据

借助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')
  }
}
posted @ 2024-02-01 14:40  年轻浅识  阅读(28)  评论(0编辑  收藏  举报