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

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);
    },

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman基本页面和请求/响应页签介绍

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一、Postman的界面介绍 Home主页、Workspace工作空间、Collections集合、Environments环境变量、Mock Server虚拟服务器、Mo…

GEE:计算有效像素占比(统计有效像素数量、像素总数)

作者:CSDN @ _养乐多_ 在GEE中进行遥感数据处理的时候,经常会由于去云,导致影像出现空洞,只有部分像素可用,或者在进行特殊处理时,只对有效像素进行处理,但是我们不知道有效像素数量和占比,无法对结果做出准确的分析。这个时候就需要统计有效像素数量占比。 本文记录…

智链引擎CEO李智:游戏化增长中台,让裂变营销快十倍、便宜十倍、好十倍丨数据猿专访...

大数据产业创新服务媒体 ——聚焦数据 改变商业 双十一电商大战一触即发&#xff0c;各个垂类的App也都希望能够借力双十一营销季&#xff0c;实现用户和营收双增长。MarTech在这个风口上&#xff0c;又成为2B赛道关注的焦点。 业内人士指出&#xff0c;MarTech的引入催生营销…

【MySQL基本功系列】第二篇 InnoDB存储引擎的架构设计

通过上一篇文章&#xff0c;我们简要了解了MySQL的运行逻辑&#xff0c;从用户请求到最终将数据写入磁盘的整个过程。当数据写入磁盘时&#xff0c;存储引擎扮演着关键的角色&#xff0c;它负责实际的数据存储和检索。在MySQL中&#xff0c;有多个存储引擎可供选择&#xff0c;…

HCIA-DHCP+DHCP中继

DHCPDHCP中继 实验拓扑配置步骤第一步 配置Eth-Trunk聚合链路&二层VLAN第二步 配置IP地址第三步 配置DHCPDHCP中继 配置验证查看PC1 PC2是否正确的获得了IP地址 实验拓扑 配置步骤 第一步 配置Eth-Trunk聚合链路&二层VLAN SW1 sysname SW1 # undo info-center enabl…

Linux 内核启动流程

目录 链接脚本vmlinux.ldsLinux 内核启动流程分析Linux 内核入口stext__mmap_switched 函数start_kernel 函数rest_init 函数init 进程 看完Linux 内核的顶层Makefile 以后再来看Linux 内核的大致启动流程&#xff0c;Linux 内核的启动流程要比uboot 复杂的多&#xff0c;涉及到…

SparkAi创作系统ChatGPT网站源码+详细搭建部署教程+AI绘画系统+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

VulnHub Nullbyte

一、信息收集 1.nmap扫描 arp-scan -l扫描内网存活主机 ┌──(root&#x1f480;kali)-[~/桌面] └─# nmap -sS -A -p- 192.168.103.201/24 -sS 半扫描 -A 扫描详细信息 -p- 扫描全端口发现开放了80、111、777、50978端口 且发现777端口开放了ssh服务&#xff0c;说明他把…

深度学习之各种配置环境

如何使用python进行深度学习&#xff0c;我们需要配置相应的环境 第一步&#xff1a;先安装python python的官网地址&#xff1a;https://www.python.org/ 点进去&#xff0c;点击 Downloads&#xff0c;然后点击 Windows 等待下载完成&#xff0c;安装步骤请参考下文&#x…

主题模型LDA教程:一致性得分coherence score方法对比(umass、c_v、uci)

文章目录 主题建模潜在迪利克雷分配&#xff08;LDA&#xff09;一致性得分 coherence score1. CV 一致性得分2. UMass 一致性得分3. UCI 一致性得分4. Word2vec 一致性得分5. 选择最佳一致性得分 主题建模 主题建模是一种机器学习和自然语言处理技术&#xff0c;用于确定文档…

Linux程序的地址空间

Linux程序的地址空间 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容深刻理解了什么程序或者进程的地址…

【性能测试】非GUI模式Jemter压测+TPS性能拐点详细,一篇带你打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 非GUI模式执行Jem…

YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型

YOLOv8 Ultralytics&#xff1a;使用Ultralytics框架训练RT-DETR实时目标检测模型 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 制作自己的数据集训练自己的数据集创建自己数据集的yaml文件football.yaml文件内容 进行训练进行验证进行预测 数据集获取参考文献 …

python 对全局变量的修改,需要使用global关键字

is_debug Falsedef get_is_debug():return is_debugdef set_is_debug(dbg):global is_debugis_debug dbg代码review的时候有个同事&#xff08;我们主要都是开发c代码的&#xff0c;python也会写&#xff0c;但是用的少&#xff09;说&#xff0c;set_is_debug函数中 is_debu…

Leetcode-94 二叉树的中序遍历

递归实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

网络安全基础之php开发文件下载的实现

前言 php是网络安全学习里必不可少的一环&#xff0c;简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中&#xff0c;文件下载的功能是必不可少&#xff0c;比如我们在论坛看到好看图片好听的歌时&#xff0c;将其下载下来时就…

蓝桥杯算法竞赛第一周题型总结

本专栏内容为&#xff1a;蓝桥杯学习专栏&#xff0c;用于记录蓝桥杯的学习经验分享与总结。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f33…

为什么单片机内不继承晶振

一、晶振是什么&#xff1f;有什么作用&#xff1f; 晶振&#xff08;Crystal Oscillator&#xff09;是一种基于晶体材料的振荡器&#xff0c;用于提供稳定的振荡信号。晶体是一种可通过机械振动在电场作用下产生相应电压的物质。晶振由晶体与电路共同组成&#xff0c;晶体负责…

KT6368A蓝牙芯片的距离天线周围的匹配元器件LC,能增加距离吗

一、简介 KT6368A蓝牙芯片的距离&#xff0c;以及天线周围的元器件&#xff0c;电感和电容&#xff0c;添加上去是否可以增加距离&#xff1f; 详细描述 关于蓝牙芯片的rf性能&#xff0c;也就是距离&#xff0c;其实中规中矩吧&#xff0c;但是达到20米还很简单的&#xff…

2023年10 种用于最佳稳定扩散最佳方案

在过去的一年里&#xff0c;您可能已经看到了很多关于 ChatGPT 和其他 AI 自动纹理的新闻。但是&#xff0c;页面&#xff08;或屏幕&#xff09;上的文字远非现代组织和设计师使用人工智能的唯一方式。Stable Diffusion 等工具可帮助您创建令人惊叹的 AI 图像&#xff0c;供个…