安装依赖

npm install xlsx --save

引入

笔者使用vue2, 引入import xlsx from ‘xlsx’ 写法,笔者使用xlsx.read和xlsx.utils.sheet_to_json报xlsx is not define,使用如下写法成功

import * as XLSX from 'xlsx/xlsx.mjs'

使用场景

笔者使用a-upload组件, 其自带的:beforeUpload=“beforeUpload”、@change=“uploadChange” 无法解析excel文件内容,自定义请求customRequest,上传时调用

<a-upload :showUploadList="false"accept=".xls, .xlsx":customRequest="fileUpload"><a-button type="primary"><a-icon type="upload" />导入Excel</a-button></a-upload>

封装上传, FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件,本场景也可用实现

upload(file) {return new Promise(resolve => {let reader = new FileReader()reader.readAsBinaryString(file)// 读取文件的原始二进制数据reader.onload = ev => {resolve(ev.target.result)}})}

重点:
1、文件放在new FormData中传给后端
2、表格中的中文是否需要转换为后端对应的字段code
3、
const workbook = read(data, {
type: ‘binary’
});
// 取第一张表
const wsname = workbook.SheetNames[0];
// 生成json表格内容
const ws = utils.sheet_to_json(workbook.Sheets[wsname]);
后续可根据需求对ws数据处理

async fileUpload(info) {let file = info.file // info是组件为你解析好的数据if (!file) returnlet reader = await this.upload(file)const worker = XLSX.read(reader, { type: 'binary' }) // 设置数据类型为binary二进制// 这个是将数据进行一步拼接// 将返回的数据转换为json对象的数据let arr = []worker.SheetNames.forEach((el) => {let temp = XLSX.utils.sheet_to_json(worker.Sheets[el])temp.forEach((item) => {Object.keys(item).forEach((el) => {item[el] = String(item[el])})})arr.push(temp)})info.file.status = 'done'// 将文件上传状态改为‘done’,info.onSuccess() // 结束上传let data = {list: arr // 按照后端要求格式上传}// 后续为自己对arr数据的处理// 取第一个sheet表数据if (arr.length > 0 && arr[0] && arr[0].length > 0) {debuggerlet self = this// const files = new window.File([data], this.fileList.name, { type: this.fileList.type })const formData = new FormData()formData.append('file', file)jghglService.importExcel(formData).then((res) => {debuggerlet title = file.name.substring(0, file.name.indexOf('.'))let kind = file.name.substring(file.name.indexOf('.') + 1, file.name.length)this.mineFormInfo = {title: title,name: title,kind: kind,catalogId: this.curCatalog.id}jghglService.saveMineInfo(this.mineFormInfo).then((res) => {if (res.success) {// 给前端对象赋值id,再次点保存时执行更新(未调用create此处必须赋值,调用create不用赋值)this.mineFormInfo.id = res.data.idthis.mineFormInfo.version = res.data.versionlet schemaObj = {dataId: this.mineFormInfo.id}jghglService.saveSchemaVersion(schemaObj).then(res => {if (res.success) {self.reloadTable()self.mineFormInfo.schemaVersionID = res.data.id// 表格中文转换为后端字段对应let newArr = arr[0].map(item => {return {xh: item['序号'],name: item['属性名称'],title: item['属性标题'],dataType: item['数据类型'],schemaId: self.mineFormInfo.schemaVersionID}})newArr.map(item => {jghglService.savemSchemaVersionAttr(item)})self.$message.success('导入成功!')}})} else {this.$message.error('导入失败:' + res.message)}})})} else {this.$message.info('excel表格sheet中没有数据,请重新导入!')}}

ant-vue实现上传excel文件并解析内容相关推荐

  1. vue之 上传 excel文件

    目录 vue之 上传 excel文件 父组件 UploadExcel.vue 效果 vue之 上传 excel文件 父组件 <upload-excel-component :on-success ...

  2. Web项目,网页上传excel文件并解析实战示例

    最近写了一个基于poi解析excel文件的工具类,所以想在web项目中测试一下,就做了这个简单的项目.本项目主要使用了 SpringMVC+RESTful+Maven的风格.适合有一定基础的人员. 源 ...

  3. Vue - 本地上传 Excel 文件页面表格预览(配合 ElementUI / 带分页)

    文章底部,获取示例源代码,克隆仓库运行起来. 代码干净整洁,无任何冗余代码, 根据自己的需求,进行改造即可. 效果图

  4. ant design pro 上传excel示例

    ant design pro 上传excel示例 前言 TS java model 前端展示 前言 大家好! 最近在学习使用ant design pro ,本人是java后端,没有专业的学习过reac ...

  5. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

  6. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...

  7. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...

  8. 服务器上传excel文件并读取数据,asp.net上传Excel文件并读取数据的实现方法

    前言 本文主要给大家介绍了关于asp.net上传Excel文件并读取数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 实现如下: 前台代码:使用服务端控件实现上传 服务端 ...

  9. 帆软报表决策系统 上传excel文件

    这个属于二次开发的,比如我要在决策系统中开发一个功能,上传excel文件或者其他文件, 首先前端使用fineUI: BI.File1 = BI.inherit(BI.File,{_defaultCon ...

最新文章

  1. 根据windows域名找ip
  2. jakarta_迁移到Jakarta EE 9
  3. 安装jupyter后,使用时显示找不到命令(command not found)
  4. 创建Goldengate例外句丙记录跟踪Oracle错误
  5. 硬件:选购CPU和显卡需了解的参数,TDP、SDP、ACP、GCP、TBP是什么?
  6. hp服务器硬盘ultra320,惠普/hp 300GB 1.5万转 3.5寸 SAS服务器硬盘 P/N:431944-B21
  7. map集合的putall_Map.put和Map.putAll方法之间的区别?
  8. Python处理PDF文档 合并两个PDF文档 和 截取指定页面
  9. 微信小程序通过点击事件传参(data-)
  10. html背景图片显示不出,css中背景图片显示不出来
  11. 超声波传感器测距实验
  12. uni-App 商品详情轮播图
  13. b450支持服务器内存,b450支持内存频率是多少
  14. nginx 启动 报错,80端口被占用问题,80端口无法杀掉问题
  15. 怎样用计算机合并视频,怎么合并视频和字幕 格式工厂视频字幕合并教程-电脑教程...
  16. 中兴手机怎么与计算机连接网络连接不上,手机可以连接wifi电脑连接不上怎么办?...
  17. NetApp AFF A 系列全闪存存储阵列
  18. 集线器、路由器、网桥(桥接器)、网关、网线、交换机、中继器(转发器)、网卡工作在哪一层
  19. 正态性检验的R语言实现
  20. 电子制造ERP管理系统在仓库管理中的应用

热门文章

  1. Scavenger:在不同的paste网站上搜索泄漏的凭据
  2. 微信小程序开发流程指南
  3. idc机房建设费用_【技术知乎】数据中心成本与机房等级的关系
  4. PAT 乙级 1075
  5. 树莓派入门(2021)最新(系统安装环境设置)
  6. Codeforces1221 B. Knights(构造)
  7. 数字图像处理第九章笔记——形态学图像处理
  8. 读书笔记--Neural Networks and Deep Learning(CH1)
  9. 独孤九剑:算法模型训练的一般流程
  10. 联邦学习与神经协同过滤模型的结合