elemenui的Upload上传整合成数组对象

news2024/12/26 0:42:42

1. 普通直接上传

<el-upload action="" :before-upload="doBeforeUpload">
      <el-button type="success" size="mini">导入</el-button>
 </el-upload>
methods:{
    doBeforeUpload(file) {
      let reader = new FileReader();// 使用 FileReader 对象读取文件内容
      // 当文件读取完成时的回调函数
      reader.onload = e => {
        const xlsx = require('xlsx');
        let data = e.target.result;

        // 使用 xlsx 库解析 Excel 文件
        let workbook = xlsx.read(data, { type: 'binary' });
        let sheet = workbook.Sheets[workbook.SheetNames[0]];

        // 将 Excel 表格数据转换为 JSON 格式
        let json = xlsx.utils.sheet_to_json(sheet, { header: 1, defval: null });
        console.log("json", JSON.stringify(json));

        // 处理数据,将每一行转换为对象
        let headers = json[0];
        let result = [];

        for (let i = 1; i < json.length; i++) {
          let obj = {};

          // 将每一行的值与表头对应起来,创建一个新的对象
          for (let j = 0; j < headers.length; j++) {
            obj[headers[j]] = json[i][j];
          }

          result.push(obj);// 将对象添加到新的数组中
        }

        console.log("最终数组==》", result);
      }

      reader.readAsBinaryString(file);// 以二进制字符串的形式读取文件内容

      return false; // 返回 false 阻止默认上传行为
    }

  }

=======》》输出

如果是第二行读取把

json[0]改成json[1]

for循环的i改成2即可

2. 拖拽上传

重点是handleChange方法,下面拿到json数据了,后面想怎么玩就怎么玩,可以根据上面普通版的整合成数组对象,下面我就不整合了

<template>
  <div>
      <el-upload ref="upload" accept=".xlsx, .xls"
                 action="https://jsonplaceholder.typicode.com/posts/"
                 :on-progress="handleFileUploadProgress"
                 :on-success="handleFileSuccess"
                 :on-change="handleChange"
                 :on-remove="handleRemove"
                 :auto-upload="false" drag>
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">导 入</el-button>
      </div>
  </div>

</template>

<script>
export default {
  data(){
    return{
      params: [], // 存储文件内容的数组对象
    }
  },
  methods:{
    /**
     * 提交form表单
     */
    submitFileForm() {
      console.log("提交上传附件内容",this.params)
    },
    /**
     * 文件选择后处理   -------------   重点,在这里处理数据
     * @param file
     * @param fileList
     * @returns {Promise<void>}
     */
    async handleChange(file, fileList) {
      console.log("文件选择后处理")

      let reader = new FileReader();// 使用 FileReader 对象读取文件内容
      // 当文件读取完成时的回调函数
      reader.onload = e => {
        const xlsx = require('xlsx');
        let data = e.target.result;

        // 使用 xlsx 库解析 Excel 文件
        let workbook = xlsx.read(data, { type: 'binary' });
        let sheet = workbook.Sheets[workbook.SheetNames[0]];

        // 将 Excel 表格数据转换为 JSON 格式
        let json = xlsx.utils.sheet_to_json(sheet, { header: 1, defval: null });
        console.log("json", JSON.stringify(json));

      }
      // 从File对象创建Blob
      let blob = file.raw.slice(0, file.raw.size, file.type);

      // 将Blob作为二进制字符串读取
      reader.readAsBinaryString(blob);


    },
    /**
     *  文件上传中处理
     * @param event
     * @param file
     * @param fileList
     */
    handleFileUploadProgress(event, file, fileList) {
      console.log("文件上传中处理")
    },
    /**
     * 文件上传成功处理
     * @param response
     * @param file
     * @param fileList
     */
    handleFileSuccess(response, file, fileList) {
      console.log("文件上传成功处理")
    },
    /**
     * 文件移除后处理
     * @param file
     * @param fileList
     */
    handleRemove(file, fileList) {
      console.log("文件移除后处理")
    },


  }
}
</script>

3. 多个Sheet页

这是修改第二个handleChange方法的代码

async handleChange(file, fileList) {
      console.log("文件选择后处理");

      let reader = new FileReader();

      // 当文件读取完成时的回调函数
      reader.onload = e => {
        const xlsx = require('xlsx');
        let data = e.target.result;

        // 使用 xlsx 库解析 Excel 文件
        let workbook = xlsx.read(data, { type: 'binary' });

        // 遍历所有表格名称
        workbook.SheetNames.forEach(sheetName => {
          let sheet = workbook.Sheets[sheetName];

          // 将 Excel 表格数据转换为 JSON 格式
          let json = xlsx.utils.sheet_to_json(sheet, { header: 1, defval: null });
          console.log(`${sheetName} 表格的数据:`, JSON.stringify(json));
        });
      };

      // 从 File 对象创建 Blob
      let blob = file.raw.slice(0, file.raw.size, file.type);

      // 将 Blob 作为二进制字符串读取
      reader.readAsBinaryString(blob);
    },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1196229.html

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

相关文章

简单得令人尴尬的FSQ:“四舍五入”超越了VQ-VAE

©PaperWeekly 原创 作者 | 苏剑林 单位 | 月之暗面 研究方向 | NLP、神经网络 正如 “XXX is all you need” 一样&#xff0c;有不少论文都以“简单得令人尴尬”命名&#xff08;An Embarrassingly Simple XXX&#xff09;&#xff0c;但在笔者看来&#xff0c;这些论文…

8种很坑的SQL错误用法

1、LIMIT 语句 分页查询是最常见的场景之一&#xff0c;但也通常也是最容易出问题的地方。例如对于下面简单的语句&#xff0c;一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引&#xff0c;性能迅速提升。 好吧&#xf…

docker 拉取镜像

2.2.1、拉取镜像java:8(jdk1.8) docker pull java:8 2.2.2、拉取镜像mysql:8.2.0 docker pull mysql:8.2.0 2.2.3、拉取镜像redis:7.0.14 docker pull redis:7.0.14 2.2.4、拉取镜像nginx:1.25.3 docker pull nginx:1.25.3 2.2.5、查看镜像 docker images 启动镜像 …

Vatee万腾的科技决策力奇迹:Vatee科技决策力的独特之选

在金融投资的复杂领域中&#xff0c;Vatee万腾以其独特的科技决策力创造了一场真正的奇迹。这不仅是一种引领投资者走向成功的选择&#xff0c;更是一种开启新时代的科技决策奇迹。 Vatee的科技决策力背后蕴藏着强大的智慧和创新。通过大数据分析、智能算法的运用&#xff0c;V…

华为防火墙二层透明模式下双机热备主备备份配置(两端为交换机)

这种模式只能是主备备份模式&#xff0c;不能是负载分担&#xff0c;因为会有环路。 故障切换是&#xff0c;如果主故障&#xff0c;主设备所有接口全都会down状态&#xff0c;然后再up一次&#xff0c;用于改变mac转发表。 FW1 hrp enable hrp interface GigabitEthernet1/0…

【赠书活动】嵌入式虚拟化技术与应用

文章目录 前言 1 背景概述 2 专家推荐 3 本书适合谁&#xff1f; 4 内容简介 5 书籍目录 6 权威作者团队 7 粉丝福利 前言 随着物联网设备急剧增长和万物互联应用迅速发展&#xff0c;虚拟化技术成为嵌入式系统焦点。这反映了信息技术迫切需求更高效、灵活和可靠系统。…

Excel 常用技巧

1: 拼接 公式: C1&B1&A1 如 D CBA 将公式输入目标列之后回车即可得到结果 , 如果有多行需要处理 , 光标选中目标单元格右下角变为 按着左键下拉即可 最后选择转换功能转换为文本即可 2: 时间戳转时间格式 公式: TEXT((B2/10008*3600)/8640070*36519,"yyyy/mm…

100V耐压内置MOS ESOP8 40V输入转5V 2.1A恒压输出

100V耐压内置MOS ESOP8 40V输入转5V 2.1A恒压输出 SC9102 是一款宽电压范围降压型 DC-DC 电源管理芯片&#xff0c;内部集成使能开关控制、基准电源、误差放大器、 过热保护、限流保护、短路保护等功能&#xff0c;非常适合宽电压输入降压使用。 SC9102 零功耗使能控制&…

Transmit :macOS 好用的 Ftp/SFtp 工具

Transmit 是一种功能强大的 FTP/SFTP/WebDAV 客户端软件&#xff0c;是一个 Mac OS X 平台上设计的文件传输软件。它由 Panic&#xff08;一家以软件工具为主的公司&#xff09;开发和维护&#xff0c;是一款非常受欢迎且易于使用的软件&#xff0c;而且被广泛认为是 Mac OS X …

【C++】哈希 Hash(闭散列、开散列介绍及其实现)

一、unordered系列关联式容器 在 C98 中&#xff0c;STL 提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到 O(logN)&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好的查询是&…

ChatGPT显现“ Something went wrong. If this issue persists ...”什么原因?如何解决?

一、报错提示 Something went wrong. If this issue persists please contact us through our help center at help.openai.com. 二、解决方案 一般是代理节点出现问题 ChatGPT退出登录 关闭代理并重新启动代理 切换其他节点 清除浏览器缓存 重新登录ChatGPT 三、其它思路…

模电学习路径--google镜像chatgpt

交流通路实质 列出电路方程1&#xff0c;方程1对时刻t做微分 所得方程1‘ 即为 交流通路 方程1对时刻t做微分&#xff1a;两个不同时刻的方程1相减&#xff0c;并 令两时刻差为 无穷小 微分 改成 差 模电学习路径&#xff1a; 理论 《电路原理》清华大学 于歆杰 朱桂萍 陆文…

使用大型语言模型进行文本摘要

路易斯费尔南多托雷斯 &#x1f4dd; Text Summarization with Large Language Models。通过单击链接&#xff0c;您将能够逐步阅读完整的过程&#xff0c;并与图进行交互。谢谢你&#xff01; 一、介绍 2022 年 11 月 30 日&#xff0c;标志着机器学习历史上的重要篇章。就在这…

jacoco插桩源码,看这一篇就够了

知识储备 众所周知&#xff0c;jacoco的功能主要分成两块&#xff1a; jacoco agentjacoco cli 其中jacoco agent主要用来对业务方服务进行插装&#xff0c;而cli则提供一些工具对插桩数据进行处理&#xff0c;比如dump&#xff0c;merge,report等&#xff0c;今天我们着重通…

周期定时器FB_Cycle_time(SCL+梯形图代码)

博途PLC定时器指令使用详细介绍请参考下面文章链接: 博途PLC IEC定时器编程应用(SCL语言)_scl定时器-CSDN博客文章浏览阅读6.1k次,点赞2次,收藏7次。博途PLC定时器支持数据类型TIME 类型 ,写法支持T#2M10S 、T#10S等,时基是MS所以如果设置1M用 DINT数据类型就是60000,…

力扣哈希表--总结篇

前言 五天写了八道题&#xff0c;有点懈怠&#xff0c;但还是有收获。 内容 一般哈希表都是用来快速判断一个元素是否出现在集合里。 为了实现高效的查找和访问&#xff0c;map通常会使用哈希表或红黑树等数据结构来存储键值对。什么时候用map&#xff0c;什么时候用数组&a…

中国集成电路设计业2023年会演讲预告 | 龙智Perforce专家解析半导体设计中的数字资产管理

2023年11月10-11日&#xff08;周五-周六&#xff09;&#xff0c;龙智即将亮相于广州举行的中国集成电路设计业2023年会&#xff08;ICCAD 2023&#xff09;&#xff0c;呈现集成了Perforce与Atlassian产品的芯片开发解决方案&#xff0c;帮助企业实现数智化转型&#xff0c;革…

华为防火墙二层透明模式下双机热备负载分担配置(两端为路由器)

这种模式只做负载分担&#xff0c;不能是主备备份&#xff0c;因为主备备份模式下&#xff0c;备设备会把vlan down掉&#xff0c;如果是主备备份模式&#xff0c;那在主挂后&#xff0c;备的状态在切换过程中先起vlan&#xff0c;再建立ospf邻接&#xff0c;那业务会断线较久&…

ThinkPHP框架 开源 虚拟资源分享付费下载PHP网站源码

源码测评&#xff1a;非常不错的资源分享网站&#xff0c;仿的是之前的码农网&#xff0c;这个网站也是在码农网的源码基础上修改而来&#xff0c;这个是用ThinkPHP仿的&#xff0c;还不错&#xff0c;测试的时候发现后台上传图片报错&#xff0c;其他暂时没有发现。 转载自…

2023/11/11

1. 实现字体渐变色 html <div class"gradient">实现字体渐变色 </div>css .gradient {display: inline-block;font-weight: 800;font-size: 40px;color: #fff;background: linear-gradient(90deg, #f00 0%, #000 50%, #00f 100%);background-clip: bo…