vue实现excel导出导入

文章目录

  • 安装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导入

定义文件导入显示框

<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.mzph.cn/web/61462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ESP32通过Arduino IDE点亮1.8寸TFT显示屏

开发板选择 本次使用开发板模块丝印为ESP32-WROOM-32E 开发板库选择 Arduino IDE上型号选择为ESP32-WROOM-DA Module 显示屏选择 使用显示屏为8针SPI接口显示屏 驱动IC为ST7735S 使用库 使用三个Arduino平台库 分别是 Adafruit_GFXAdafruit_ST7735SPI 代码详解 首…

图像显示的是矩阵的行和列,修改为坐标范围。

x 3; y 3; f1x x^2 y^2; guance1 f1x; F (x, y) sqrt((x.^2 y.^2 - guance1).^2); % 使用点乘 [x, y] meshgrid(0:1:5, 0:1:5); Z F(x, y); figure; imagesc(Z); % 由于 imagesc 使用矩阵索引作为坐标&#xff0c;我们需要手动添加刻度 % 这里我们假设 x 和 y 的范围…

【K230 CanMV】图像识别-摄像头获取图像 Sensor 函数全解析

引言&#xff1a;随着图像处理技术的不断发展&#xff0c;摄像头在嵌入式系统中的应用越来越广泛&#xff0c;尤其是在智能监控、自动驾驶、机器人视觉等领域。K230作为一款高性能的嵌入式处理器&#xff0c;提供了强大的图像处理能力&#xff0c;支持多种类型的摄像头接入与图…

基于FPGA的FM调制(载波频率、频偏、峰值、DAC输出)-带仿真文件-上板验证正确

基于FPGA的FM调制-带仿真文件-上板验证正确 前言一、FM调制储备知识载波频率频偏峰值个人理解 二、代码分析1.模块分析2.波形分析 总结 前言 FM、AM等调制是学习FPGA信号处理一个比较好的小项目&#xff0c;通过学习FM调制过程熟悉信号处理的一个简单流程&#xff0c;进而熟悉…

论文笔记(五十九)A survey of robot manipulation in contact

A survey of robot manipulation in contact 文章概括摘要1. 引言解释柔顺性控制的概念&#xff1a;应用实例&#xff1a; 2. 需要接触操控的任务2.1 环境塑造2.2 工件对齐2.3 关节运动2.4 双臂接触操控 3. 接触操控中的控制3.1 力控制3.2 阻抗控制3.3 顺应控制 4. 接触操控中的…

简单的TCPSocket客户端使用案例(已入OPCommon)

做一个实体操作工具类&#xff08;包含&#xff09; public delegate void TcpClientReceivedEventHandler(TcpClientStateEventArgs args);public class TCPSocketClient{ //接收委托public event TcpClientReceivedEventHandler TcpReceived;private CancellationTokenSour…

速盾:高防 CDN 中高级缓存有什么用?

在高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;的服务体系里&#xff0c;高级缓存功能犹如一颗强大的 “性能优化引擎”&#xff0c;对于提升网站或应用的运行效率、减轻源站压力以及改善用户体验等诸多方面都发挥着极为关键的作用。 一…

拥抱 OpenTelemetry:阿里云 Java Agent 演进实践

作者&#xff1a;陈承 背景 在 2018 年的 2 月&#xff0c;ARMS Java Agent 的第一个版本正式发布&#xff0c;为用户提供无侵入的的可观测数据采集服务。6 年后的今天&#xff0c;随着软件技术的迅猛发展、业务场景的逐渐丰富、用户规模的快速增长&#xff0c;我们逐渐发现过…

学习ASP.NET Core的身份认证(基于Session的身份认证3)

开源博客项目Blog中提供了另一种访问控制方式&#xff0c;其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式&#xff0c;测试程序中直接复用开源博客项目Blog中的相关类及接口定义&#xff0c;并在其上调整判断逻辑。   首先是接口A…

面试小札:Java如何实现并发编程

多线程基础 继承Thread类 定义一个类继承自 Thread 类&#xff0c;重写 run 方法。在 run 方法中编写线程要执行的任务逻辑。例如&#xff1a; java class MyThread extends Thread { Override public void run() { System.out.println("线程执行的任务…

电子应用设计方案-31:智能AI音响系统方案设计

智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备&#xff0c;通过融合语音识别、自然语言处理、音频播放等技术&#xff0c;为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…

模拟实现命令行解释器shell

shell本质就是一个进程&#xff0c;它提供了一个用户界面&#xff0c;用于接收用户输入的命令&#xff0c;并将这些命令解释成操作系统能够理解和执行的操作。它充当了用户和操作系统内核之间的中介。例如&#xff0c;在 Linux 系统中&#xff0c;当用户在终端输入ls命令时&…

可变电阻和电位器

1.可变电阻和电位器 &#xff08;1&#xff09;可变电阻&#xff1a;阻值可以调整的电阻。 &#xff08;2&#xff09;电位器&#xff1a;为了获得某个电位&#xff08;电势、电压&#xff09;的器件。其本质就是在一个固定阻值的电阻中间增 加一个触点&#xff0c;滑动电阻的中…

.NET Md5加密异常处理

操作系统更新后&#xff0c;软件出现各种bug~ 乍一看&#xff0c;md5加密算法跪了&#xff01; 为啥会出现md5算法崩溃呢&#xff1f; 原因是操作系统开启了FIPS&#xff0c;而md5并不是FIPS&#xff08;Federal Information Processing Standards 即&#xff08;美国&#x…

RK3568平台开发系列讲解(PWM篇)PWM 子系统框架

🚀返回专栏总目录 文章目录 一、PWM 设备驱动层二、PWM 核心层三、PWM 适配器驱动层沉淀、分享、成长,让自己和他人都能有所收获!😄 📢整个 PWM 子系统可以用下面的框图来描述: 再上图中 PWM 子系统被划分为了三个层次, 分别为用户空间、 内核空间和硬件层, 内核空…

CSAPP Cache Lab(缓存模拟器)

前言 理解高速缓存对 C 程序性能的影响&#xff0c;通过两部分实验达成&#xff1a;编写高速缓存模拟器&#xff1b;优化矩阵转置函数以减少高速缓存未命中次数。Part A一开始根本不知道要做什么&#xff0c;慢慢看官方文档&#xff0c;以及一些博客&#xff0c;和B站视频&…

android studio Terminal控制台命令打包 apk

在Android Studio中&#xff0c;可以使用Gradle命令来构建APK。 1&#xff0c;打开终端&#xff1a; &#xff08;Windows上为Terminal&#xff0c;macOS或Linux上为Terminal或Shell&#xff09;&#xff0c;然后开始输入命令执行构建。 2&#xff0c;转到项目的根目录&…

【趣味升级版】斗破苍穹修炼文字游戏HTML,CSS,JS

目录 图片展示 开始游戏 手动升级&#xff08;满100%即可升级&#xff09; 升级完成&#xff0c;即可解锁打怪模式 新增功能说明&#xff1a; 如何操作&#xff1a; 完整代码 实现一个简单的斗破苍穹修炼文字游戏&#xff0c;你可以使用HTML、CSS和JavaScript结合来构建…

MySQL查询缓存详解

一、查询缓存的基本概念 MySQL 的查询缓存是一种用于存储查询结果的内存区域。当一个查询被执行时&#xff0c;MySQL 首先检查查询缓存中是否已经存在相同的查询结果。如果存在&#xff0c;直接从查询缓存中返回结果&#xff0c;而无需再次执行查询语句&#xff0c;从而大大提高…

C#里怎么样使用Array.BinarySearch函数?

C#里怎么样使用Array.BinarySearch函数? 因为二分算法如此重要,所以要多加练习。 但是它的返回值,也有三种状态,导致很多人使用它的时候, 也感觉到迷惑的。 在这里的例子演示了三种返回值的使用: /** C# Program to Search an element with Array Indices*/ using …