ant-vue实现上传excel文件并解析内容
安装依赖
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文件并解析内容相关推荐
- vue之 上传 excel文件
目录 vue之 上传 excel文件 父组件 UploadExcel.vue 效果 vue之 上传 excel文件 父组件 <upload-excel-component :on-success ...
- Web项目,网页上传excel文件并解析实战示例
最近写了一个基于poi解析excel文件的工具类,所以想在web项目中测试一下,就做了这个简单的项目.本项目主要使用了 SpringMVC+RESTful+Maven的风格.适合有一定基础的人员. 源 ...
- Vue - 本地上传 Excel 文件页面表格预览(配合 ElementUI / 带分页)
文章底部,获取示例源代码,克隆仓库运行起来. 代码干净整洁,无任何冗余代码, 根据自己的需求,进行改造即可. 效果图
- ant design pro 上传excel示例
ant design pro 上传excel示例 前言 TS java model 前端展示 前言 大家好! 最近在学习使用ant design pro ,本人是java后端,没有专业的学习过reac ...
- Django框架(上传Excel文件并读取)
博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...
- php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...
- 服务器上传excel文件并读取数据,asp.net上传Excel文件并读取数据的实现方法
前言 本文主要给大家介绍了关于asp.net上传Excel文件并读取数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 实现如下: 前台代码:使用服务端控件实现上传 服务端 ...
- 帆软报表决策系统 上传excel文件
这个属于二次开发的,比如我要在决策系统中开发一个功能,上传excel文件或者其他文件, 首先前端使用fineUI: BI.File1 = BI.inherit(BI.File,{_defaultCon ...
最新文章
- 根据windows域名找ip
- jakarta_迁移到Jakarta EE 9
- 安装jupyter后,使用时显示找不到命令(command not found)
- 创建Goldengate例外句丙记录跟踪Oracle错误
- 硬件:选购CPU和显卡需了解的参数,TDP、SDP、ACP、GCP、TBP是什么?
- hp服务器硬盘ultra320,惠普/hp 300GB 1.5万转 3.5寸 SAS服务器硬盘 P/N:431944-B21
- map集合的putall_Map.put和Map.putAll方法之间的区别?
- Python处理PDF文档 合并两个PDF文档 和 截取指定页面
- 微信小程序通过点击事件传参(data-)
- html背景图片显示不出,css中背景图片显示不出来
- 超声波传感器测距实验
- uni-App 商品详情轮播图
- b450支持服务器内存,b450支持内存频率是多少
- nginx 启动 报错,80端口被占用问题,80端口无法杀掉问题
- 怎样用计算机合并视频,怎么合并视频和字幕 格式工厂视频字幕合并教程-电脑教程...
- 中兴手机怎么与计算机连接网络连接不上,手机可以连接wifi电脑连接不上怎么办?...
- NetApp AFF A 系列全闪存存储阵列
- 集线器、路由器、网桥(桥接器)、网关、网线、交换机、中继器(转发器)、网卡工作在哪一层
- 正态性检验的R语言实现
- 电子制造ERP管理系统在仓库管理中的应用