前端解析excel表格
需求如下:
前端拿到表格中的数据,对数据做以下判断,并将拿到的数据转换成以下json格式,传给后端。
具体实现:
- 下载npm包:npm install xlsx --save
- 在vue文件中引入依赖:import XLSX from "xlsx"
- 使用iviewui中的上传组件:
<Upload class="row-mgr"
:before-upload="handleUpload" accept=".xls" :show-upload-list="false"
action="">
<Button icon="ios-cloud-upload-outline">批量导入</Button>
</Upload> - js解析文件及对解析的数据进行处理:
<script>
import XLSX from "xlsx"
export default {
name: "deviceImport",
props: ['deviceTypes'],
data() {
return {
deviceTypesArry: []
}
},
computed: {},
methods: {
// 获取excel第一行的内容获取表头
getList1(wb){
let wbData = wb.Sheets[wb.SheetNames[0]]; // 读取的excel单元格内容
let re = /^[A-Z]1$/; // 匹配excel第一行的内容
let arr1 = [];
for (let key in wbData) { // excel第一行内容赋值给数组
if (wbData.hasOwnProperty(key)) {
if (re.test(key)) {
arr1.push(wbData[key].w);
}
}
}
return arr1;
},
// 增加对应字段空白内容
AddXlsxData(xlsxData, list1){
let addData = null; // 空白字段替换值
console.log(xlsxData)
for (let i = 0; i < xlsxData.length; i++) { // 要被JSON的数组
for (let j = 0; j < list1.length; j++) { // excel第一行内容
if (!xlsxData[i][list1[j]]) {
xlsxData[i][list1[j]] = addData;
}
}
}
return xlsxData;
},
handleUpload (file) {
this.file = file;
let fileend = file.name.substring(file.name.lastIndexOf("."))
let isExcel = (fileend === '.xls' || file.type === 'application/vnd.ms-excel')
if (!isExcel) {
this.$Message.error('您只能上传.xls格式的文件!')
return
}
const fileReader = new FileReader()
fileReader.onload = (ev) => {
try {
const data = ev.target.result
const workbook = XLSX.read(data, {
type: 'binary' // 以字符编码的方式解析
})
const exlname = workbook.SheetNames[0] // 取第一张表
let exl = XLSX.utils.sheet_to_json(workbook.Sheets[exlname]) // 生成json表格内容 const list1 = this.getList1(workbook);
// debugger
exl = this.AddXlsxData(exl, list1);
const name_null = exl.filter(function (item) {
if ((!item.name || item.name == '')||(!item.type || item.type == '')) {
return item
}
})
if(name_null.length!==0){
this.$Message.error('name和type都不能为空,请检查表格内的数据')
return
}
const _type = exl.filter((item) => {
if (this.deviceTypesArry.indexOf(item.type) != -1) {
return item
}
})
//deviceTypes 判断表格中的 type必须包含在系统中的type(左上角下拉框)不能随便填
if (_type.length !== exl.length) {
this.$Message.error('type的值必须是包含在系统中的type,请检查表格内的数据')
return
}
const jsonPrams = exl.map(item => {
const obj = {
name: item.name,
type: item.type,
label: item.label,
token: item.token,
additionalInfo: {
gateway: item.gateway == true || item.gateway == 'TRUE' ? true : false,
description: item.description
}
}
return obj
})
console.log(jsonPrams)
} catch (e) {
console.log('出错了::')
return false
}
}
fileReader.readAsBinaryString(file)
return isExcel;
}, },
mounted: function () {
//先提取 deviceTypes中所有的type值
this.deviceTypesArry = this.deviceTypes.map(item => {
return item.type
})
}
}
</script>打印结果:
前端解析excel表格的更多相关文章
- 使用PHPExcel解析Excel表格
安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...
- JXL解析Excel表格内容到数据库
java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...
- H5纯前端生成Excel表格
H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...
- Java使用POI解析Excel表格
概述 Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能. 常见的Excel格式有xls和xlsx.07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx ...
- AngularJS之前端解析excel文件
之前发现一款比较强大的js解析excel插件SheetJS js-xlsx,一直未投入到生产中使用.最近有批量导入的需求,大致看了下文档,使用比较方便快捷,容易上手,现在以AngularJS为例,介绍 ...
- java后台读取/解析 excel表格
需求描述 前台需要上传excel表格,提交到后台,后台解析并返回给前台,展示在前台页面上! 前台部分代码与界面 <th style="padding: 7px 1px;width:15 ...
- vue 纯前端导出 excel 表格
在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...
- 前端导出excel表格
前言近期项目有个新需求--将折线图表的数据加一个下载成excel表格的功能.以前下载功能都是调后台接口的,但是这个迭代,后台压力比较重,部分就交给了前端自己实现,下面就记录一下前端如何实现excel表 ...
- vue 利用xlsx、xlsx-style、file-saver实现前端导出excel表格 (包括设置单元格居中、边框等样式) antdesignvue、elementui、vxetable 等都适用
我用的方法是在表格的根组件外层赋一个div用来导出整个表格,所以antdesignvue.elementui.vxetable 或者原生的table写法应该全都适用,此处我用的框架为antdesign ...
- php解析Excel表格并且导入MySQL数据库
最近根据客户需求,需要增加一个导入Excel表格的功能,Excel中存放的是知识库中医知识的分类体系目录.是在thinkphp框架下编写的代码,用的是phpexcel第三方包.测试环境用的是xampp ...
随机推荐
- 加密算法解析:MD5、DES和RAS的工作原理与特点
一.MD5不可逆加密 1.1-理解MD5 MD5公开的算法,任何语言实现后其实都是一样的.通用的 不可逆加密:原文--加密--密文,密文无法解密出原文 1.2-MD5封装 using System.I ...
- [Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势
原文:https://www.freebuf.com/sectool/366854.html 存自己这里方便看. 0x00 前言 如何修改本地pwn文件和题目所给环境一致,从而进行调试,这是从学习堆开 ...
- 混合开发模式是否可以在App备案制度下突围
网站 ICP 备案已施行了很久,我们也非常清楚必须在进行 ICP 备案后,网站才能在大陆范围合法运营,并且用户可以通过域名正常访问网站. 但是月初出了新规,明年起,国内的 App 也要像网站一样进行备 ...
- 14.4K Star,一款外观漂亮、运行快速、动画细腻的开源免费UI组件库
之前给大家推荐了很多后台模版,有读者希望推荐一些跟通用的好看组件,毕竟出了后台还有很多其他场景嘛.所以,今天继续给大家推荐一个广受好评的UI组件库:NextUI 主要特性 NextUI的主要目标是简化 ...
- 利用AI点亮副业变现:5个变现实操案例的启示
整体思维导图: 在这里先分享五个实操案例: 宝宝起名服务 AI科技热点号 头像壁纸号 小说推广号 流量营销号 你们好,我是小梦. 最初我计划撰写一篇关于AI盈利策略的文章,对AI目前的技术走向.应用场 ...
- 《Linux基础》03. 运行级别 · 实用指令
@ 目录 1:运行级别 2:帮助指令 2.1:man 2.2:help 3:文件目录指令 3.1:pwd 3.2:ls 3.3:cd 3.4:mkdir 3.5:rmdir 3.6:touch 3.7 ...
- 通过商品API接口获取到数据后的分析和应用
一.如果你想要分析商品API接口获取到的数据,可以按照如下的步骤进行: 了解API接口返回值的格式,如JSON格式.XML格式.CSV格式等,选择适合你的数据分析方式. 使用API请求工具(如Post ...
- 构建iOS交叉编译环境
要进行高级的iOS编程,我们需要很多工具链来帮我们完成这一目的 构建iOS交叉编译环境: 1.新建一个iphone交叉编译虚拟机 2. 为我们的虚拟机添加第二个网卡,设为host-only来达到能与宿 ...
- Nomad 系列-Nomad 挂载存储卷
系列文章 Nomad 系列文章 概述 显然,如果 Nomad 要运行有状态存储,那么挂载存储卷就是必备功能. Nomad 允许用户通过多种方式将持久数据从本地或远程存储卷装载到任务环境中: 容器存储接 ...
- defined('BASEPATH') OR exit('No direct script access allowed'); 的作用
起到保护.php文件的作用, 如果直接访问此php文件会得到"不允许直接访问脚本"的错误提示 如果你是用ci框架或者其他的什么, 就建议加上, 如果你怕别人恶意攻击你的话