vue实现excel导出导入

news/2024/12/1 13:34:53/

文章目录

  • 安装xlsx依赖和file-saver依赖
  • Excel导出
    • 使用element-ui的el-table展示数据
    • 定义导出按钮
    • 将数据导出
  • excel导入
    • 定义文件导入显示框
    • 定义导入按钮
    • 解析选择的文件进行导入

安装xlsx依赖和file-saver依赖

npm install xlsx -S
npm install file-saver -S

Excel导出

使用element-ui的el-table展示数据

<el-table:data="tableData"style="width: 100%"><el-table-columnprop="date"label="日期"width="180"></el-table-column><el-table-columnprop="name"label="姓名"width="180"></el-table-column><el-table-columnprop="address"label="地址"></el-table-column></el-table>

定义导出按钮

<eh-button id="you-export" class="changeButton" @click="Export">主数据导出</eh-button>

将数据导出

 //导出excelExport() {// 假设你的表格数据是从data属性获取的const data = this.getExportAllNodes(this.tableData);// 创建工作簿const ws = XLSX.utils.json_to_sheet(data);// 创建工作簿并添加工作表const wb = XLSX.utils.book_new();XLSX.utils.book_append_sheet(wb, ws, "Sheet1");// 生成Excel文件const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' });// 字符串转ArrayBufferfunction s2ab(s) {const buf = new ArrayBuffer(s.length);const view = new Uint8Array(buf);for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;return buf;}// 保存文件saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), '物料主数据.xlsx');// this.$refs.tableData.openExport();},getExportAllNodes(list) {//exportOutData为在data中创建的列表变量: exportOutData:[]this.exportOutData = [];list.forEach(item => {this.exportOutData.push({'物料编码': item.mrlCode,'物料名称': item.mrlName,'组织编码': item.useOrgCode,'图号(旧编码)': item.mrlOldCode,'物料分组编码': item.mrlGroupCode,'产品组编码': item.proGroupCode,'物料属性': item.mrlProperty,'存货类别编码': item.categoryCode,'基本单位': item.baseUnitCode,'基本净重': item.netWeight,'固定提前期': item.fixLeadTime,'批号管理': item.batchManage,'仓库编码': item.stockCode,'采购单位编码': item.purchaseUnitCode,'采购计价单位编码': item.purPriceUnitCode,'采购员编码': item.purchaserCode,'计划批量类型编码': item.batchType,'计划MRP编码': item.mrlControllerCode,'生产车间编码': item.workShopCode,});})return this.exportOutData;},

excel_85">excel导入

定义文件导入显示框

<el-dialogtitle="主数据导入":visible.sync="youDataDialogVisible"@close="dialogAssetImpClose"custom-class="dialog-auto"><el-formlabel-position="top"autocomplete="off"label-width="100px":inline="true"class="form-container form-inline"><div class="item-button"><el-button class="changeButton" v-throttle @click="hxMainDataUpload()">导入</el-button></div><el-form-item label="选择文件" prop="mbbUdiGid"><el-uploadref="upload"action="#":auto-upload="false":on-change="handleFileChange":before-upload="beforeUpload"><el-button slot="trigger" size="small" type="primary">选择Excel文件</el-button></el-upload></el-form-item></el-form></el-dialog>

定义导入按钮

<eh-button id="you-import" class="changeButton" @click="importYouData">主数据导入</eh-button>

点击导入按钮时将youDataDialogVisible 设置为true

解析选择的文件进行导入

importYouData(){//youDataDialogVisible为data中定义的变量:youDataDialogVisible: false,this.youDataDialogVisible = true;
},
handleFileChange(file, fileList) {this.file = file.raw;const reader = new FileReader();reader.readAsArrayBuffer(this.file);reader.onload = (e) => {const data = new Uint8Array(e.target.result);const workbook = XLSX.read(data, { type: 'array' });const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName];// const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });// 这里可以处理json数据,例如导入到数据库等const jsonData = XLSX.utils.sheet_to_json(worksheet);// jsonData现在是Excel文件的数据,格式为JSON// 在这里处理你的jsonData,例如保存到数据库等this.hxMainImportData = jsonData;};},hxMainDataUpload() {if (this.hxMainImportData == []) {this.$message.error('请选择要导入的Excel文件!');return;}let data = qs.stringify({hxMainDatas: JSON.stringify(this.hxMainImportData),loginId: this.$util.getCookie("loginName"),})//点击导入按钮,发送请求之前关闭数据导入弹窗this.$http.post("youController!importDatas.m", data).then((res) => {if (res.erroCode == 0) {this.hxMainDataDialogVisible = false;// 清除已上传的文件this.$refs.upload.clearFiles();this.queryHxMainMrlData();this.$message({message: res.msg,type: "success",});} else {this.$message({message: res.msg,type: "error",});}});},//数据导入弹窗关闭方法dialogAssetImpClose() {this.$refs.upload.clearFiles(); // 清除已上传的文件},beforeUpload(file) {const isExcel = /\.(xlsx|xls|csv)$/.test(file.name);if (!isExcel) {this.$message.error('只能上传.xlsx、.xls、.csv 文件!');return false;}return true;},},

http://www.ppmy.cn/news/1551498.html

相关文章

【C#设计模式(15)——命令模式(Command Pattern)】

前言 命令模式的关键通过将请求封装成一个对象&#xff0c;使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令&#xff0c;如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令&#xff08;抽象类&#xff09; public abstract class …

Redis开发02:redis.windows-service.conf 默认配置文件解析与注解

文件位置&#xff1a;redis安装目录下的 redis.windows-service.conf &#xff0c;存放了redis服务的相关配置&#xff0c;下面列举出默认配置的含义&#xff1a; 配置项含义bind 127.0.0.1限制 Redis 只监听本地回环地址&#xff0c;意味着只能从本地连接 Redis。protected-m…

Flink的双流join理解

如何保证Flink双流Join准确性和及时性、除了窗口join还存在哪些实现方式、究竟如何回答才能完全打动面试官呢。。你将在文中找到答案。 1 引子 1.1 数据库SQL中的JOIN 我们先来看看数据库SQL中的JOIN操作。如下所示的订单查询SQL&#xff0c;通过将订单表的id和订单详情表ord…

物料理解笔记·蓝白段子线·端子线座子焊接反了怎么处理!!!

目录 蓝白端子排线 端子线座子焊接错了怎么办 端子线如何拆线 编写不易&#xff0c;请勿搬运&#xff0c;仅供学习&#xff0c;感谢理解 蓝白端子排线 蓝白端子排线&#xff0c;这种端子线常用与编码电机的接线&#xff0c;或者在板子上通过提供段子线的接口&#xff0c;通…

Java 单例模式:深度解析与应用

在软件开发领域&#xff0c;设计模式是解决常见设计问题的有效方案&#xff0c;而单例模式作为创建型设计模式中的一员&#xff0c;其重要性不容小觑。它能够确保一个类仅有一个实例&#xff0c;并提供全局访问点&#xff0c;这一特性在资源管理、配置信息读取、线程池管理以及…

三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)

>本文收集关于透明对象渲染技术中关于OIT技术的资料&#xff0c;尝试用简单的逻辑对这些内容进行整理。 1、透明对象的特殊对待 不要小瞧png图片和jpg图片的差异&#xff01;在一般的三维平台&#xff0c;png代表的是带透明通道的纹理&#xff0c;而jpg代表的是不带透明的…

Fastadmin系统配置增加配置字段类型

项目有一个上传APK安装包文件的需求&#xff0c;使用框架自带的 ‘文件’ 类型&#xff0c;每次都是不同路径不同文件名。希望保持固定路径和文件名所以就自己写加了一个类型&#xff0c;需要修改的地方如下&#xff1a; 1. app\common\model\Config.php 在 getTypeList 方法中…

记录一些虚拟机桥接网络,windows网络遇到的小问题

1 virtual box 桥接的虚拟系统无 ipv4 地址 https://blog.csdn.net/qq_44847649/article/details/122582954 原因是 wlan 无线网卡没开共享给 virtual box host only (之前用过 vmware 也类似) 2 无法两台 windows10 物理机无法相互 ping 通 https://blog.csdn.net/qq_35…