当前位置:首页 » 《关于电脑》 » 正文

vue 前端读取Excel文件并解析

26 人参与  2024年09月11日 16:01  分类 : 《关于电脑》  评论

点击全文阅读


前端读取Excel文件并解析

前端如何解释Excel呢

平时项目中对于Excel的导入解析是很常见的功能,一般都是放在后端执行;但是也有特殊的情况,偶尔也有要求说前端执行解析,判空,校验等,最后组装成后端接口想要的数据结构。

前端如何解释Excel呢

因为我使用插件执行的 you know

安装插件
npm install xlsx@0.14.1   // 0.14.1 是我使用的版本
还有个nanoid
npm i nanoid 

此处我没有使用安装的这个 而是使用 自定的代码如下:

// index.jsconst createId =  () => {  return (    Number(Math.random().toString().substr(2, 7) + Date.now()).toString(36) +    Date.now()  )}export {  createId as default,  createId}
安装已经完成了 当然 依然 you know
import XLSX from 'xlsx'import nanoid from 'xxxx/xxx/index'
报一丝 差点忘记了 template
<el-upload class="upload" action="" :auto-upload="false" :show-file-list="false" :multiple="false" :on-change="(file, fileList) => importTemp(file, fileList)">          <el-button v-permission="'are you ok'" type="primary" size="small" plain class="flex" >you know the name of the custom button</el-button>        </el-upload>
finally
methods: {importTemp(file, fileList) {      const fileReader = new FileReader()      fileReader.onload = ev => {        try {          const data = ev.target.result          const workbook = XLSX.read(data, {            type: 'binary'          })          const sheet = Object.keys(workbook.Sheets)[1] // 我是用的是第二个          const json = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]) //           const worksheet = workbook.Sheets[sheet]          const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 })          if (!jsonData.length) return          const headers = jsonData[0]          if (!headers.length) return          const colorParam = headers.find(i => /xxx/.test(i))          const transtypeParam = headers.find(i => /xxx/.test(i))          const operationTypeParam = headers.find(i => /xxx/.test(i))          const systemCodeParam = headers.find(i => /xxx/.test(i))          const platCodeParam = headers.find(i => /xxx/.test(i))          const truckingBillNoParam = headers.find(i => /xxx/.test(i))          const delivyPlanTypeParam = headers.find(i => /xxx/.test(i))          const targetObj = {}          const nameMap = { // 定义必填的字段            systemCode: systemCodeParam,            platCode: platCodeParam,            operationType: operationTypeParam,            truckingBillNo: truckingBillNoParam,            transType: transtypeParam,            vehicleNumber: '车牌号',            carColor: colorParam,            driverName: '司机姓名',            idcard: '司机身份证号',            driverPhone: '司机手机号',            clientCompanyCode: 'xxx',            clientCompanyName: 'xxx名称',            // messageBatchNo: 'xxx批次号',            // detailsCounts: '明细条数',            billId: 'xxx',            billDependId: 'xxx',            factoryBillId: 'xxx',            delivyPlanType: delivyPlanTypeParam          }          for (let [idx, el] of json.entries()) {            let tempObj = {            }            for (const key of Object.keys(nameMap)) {              const value = el[nameMap[key]]              if (!value && value !== 0) {                this.$message.warning(`第${idx + 2}行,字段: ${nameMap[key]} 为必填值`)                return              }              tempObj[key] = value            }            tempObj = {              ...tempObj,              queueId: el['车辆排队号']            }            if (targetObj[tempObj.truckingBillNo]) {              targetObj[tempObj.truckingBillNo].push(tempObj)            } else {              targetObj[tempObj.truckingBillNo] = [tempObj]            }          }          const targetList = Object.keys(targetObj).map((key, i) => {            const mainitem = targetObj[key][0]            const target = {}            Object.keys(mainitem).map(key => {              if (!['qqq', 'xxxx', 'ssss', 'wwww'].includes(key)) {                const val = (mainitem[key] + '').replace(/\s/gi, '')                target[key] = ['null', 'undefined'].includes(val) ? '' : val // 判空下              }            })            target.details = targetObj[key].map(item => {              return {                billId: item.qqq,                billDependId: item.xxxx,                factoryBillId: item.ssss,                delivyPlanType: item.wwww              }            })            target.detailsCounts = target.details.length            target.messageBatchNo = nanoid() + i            return target          })          // 后台请求接口          import({ // 你自己的哦            importDataList: targetList          }).then(res => {            const { msg, status } = res            if (status) {              this.$message.success('发送成功')            } else {              this.$message.error(msg ?? '操作失败')            }          })        } catch (e) {          console.log(e, 'error')        }      }      fileReader.readAsBinaryString(file.raw)    }}
catch
我的附件类型
双人行也有我师焉:哎呦不错哦

点击全文阅读


本文链接:http://zhangshiyu.com/post/158335.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1