首页 > 其他分享 >导入导出(Excel)vue

导入导出(Excel)vue

时间:2023-08-25 09:12:24浏览次数:37  
标签:XLSX vue const 导出 Excel item 导入 workbook sheet

 

导入导出(Excel)

首先 vue安装插件 (最后有完整代码)

npm install xlsx file-saver

其次:

简单的导出按钮

代码:

<template>

  <div>

    <el-button type="primary" @click="exportExcel">导出 Excel</el-button>

    <input

      type="file"

      ref="fileInput"

      style="display: none"

      @change="importExcel"

    />

    

  </div>

</template>

 

在script引用

//导出需要的文件

import * as XLSX from "xlsx";

import { saveAs } from "file-saver";

下面写方法

用于显示数据 传入到定义的导出数组中

定义的data数组 用于在Excel    显示需要那些字段,这里就写哪些字段,其他无需改动

这里map() 方法被用于将 this.datalist中的每个对象转换为一个数组,然后将这些数组组合成一个二维数组 data。便于后续使用 XLSX.utils.aoa_to_sheet() 方法将数据导出为 Excel 文件。

 

用于处理从后台导入的数据 (

首先,通过 this.$refs.fileInput.files[0] 获取用户选择的文件。然后,创建一个 FileReader 对象,并为其设置 onload 事件处理程序。

当文件读取完成时,reader.onload 事件处理程序会执行,其中 e.target.result 包含文件的二进制数据。根据 e.target.result 的类型(ArrayBuffer),使用 XLSX.read() 方法将二进制数据解析为工作簿对象 workbook。

接下来,通过 workbook.SheetNames[0] 获取第一个工作表的名称,然后通过 workbook.Sheets[sheetName] 获取该工作表的对象 sheet。

使用 XLSX.utils.sheet_to_json() 方法,可以将工作表转换为 JSON 对象。在方法的参数中,我们设置 header: 1,表示将表格的第一行作为 JSON 对象的键值。最终,得到的 JSON 对象存储在 jsonData 中。

在注释处的 TODO 部分,您可以编写自己的代码来处理导入的数据。例如,您可以将 jsonData 存储到组件的数据中,或者进行其他各种操作。

最后,将 jsonData 打印到控制台以供调试和查看导入结果。您可以根据具体需求对此部分进行修改和扩展。

 

以下是完整代码:

<template>

  <div>

    <el-button type="primary" @click="exportExcel">导出 Excel</el-button>

    <input

      type="file"

      ref="fileInput"

      style="display: none"

      @change="importExcel"

    />

    

  </div>

</template>

 

<script>

//导出需要的文件

import * as XLSX from "xlsx";

import { saveAs } from "file-saver";

 

export default {

  data() {

    return {

      //导出需要的数组 与显示共用同一个数组

      datalist: [],

      dialogFormVisible: false,

      //省市区

      areaData: [

        {

          value: 0,

          province: "",

        },

        {

          value: 1,

          city: "",

        },

        {

          value: 2,

          county: "",

        },

      ],

    };

  },

  created() {

    this.axios

      .get("https://localhost:7059/api/Login/GetUserInfos")

      .then((res) => {

        this.datalist = res.data;

        console.log(this.datalist);

      })

      .catch((error) => {

        console.error(error);

      });

  },

  methods: {

    //导出

    exportExcel() {

      // 构造数据

      const data = [

        ["姓名", "性别", "省", "市", "区", "详细地址", "创建日期", "修改日期"],

        ...this.datalist.map((item) => [

          item.userName,

          item.sex ? "男" : "女",

          item.provName,

          item.cityName,

          item.countryName,

          item.addressDetail,

          item.createDate,

          item.updateDate,

        ]),

      ];

      // 创建 workbook 对象

      const workbook = XLSX.utils.book_new();

      const sheet = XLSX.utils.aoa_to_sheet(data);

      XLSX.utils.book_append_sheet(workbook, sheet, "Sheet1");

 

      // 将 workbook 导出为 Excel 文件

      const excelBuffer = XLSX.write(workbook, {

        bookType: "xlsx",

        type: "array",

      });

      const excelBlob = new Blob([excelBuffer], {

        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",

      });

      saveAs(excelBlob, "data.xlsx");

    },

    //导入处理

    importExcel() {

      const file = this.$refs.fileInput.files[0];

      const reader = new FileReader();

 

      reader.onload = (e) => {

        const data = new Uint8Array(e.target.result);

        const workbook = XLSX.read(data, { type: "array" });

        const sheetName = workbook.SheetNames[0];

        const sheet = workbook.Sheets[sheetName];

 

        // 将 Excel 数据转为 JSON 对象

        const jsonData = XLSX.utils.sheet_to_json(sheet, { header: 1 });

 

        // TODO: 处理导入的数据

 

        console.log(jsonData);

      };

 

      reader.readAsArrayBuffer(file);

    },

  },

};

</script>

最后成果:

 

标签:XLSX,vue,const,导出,Excel,item,导入,workbook,sheet
From: https://www.cnblogs.com/qibaidao/p/17655983.html

相关文章

  • 使用 docker 打包构建部署 Vue 项目,一劳永逸解决node-sass安装问题
    文章源于Jenkins构建Vue项目失败,然后就把node_modules删了重新构建发现node-sass安装不上了,折腾一天终于可以稳定构建了。犹记得从学node的第一天,就被node-sass折磨了一整天,后面本地没问题了然后服务器开始折磨了,这次又遇到,尝试了一次又一次,还是用本地包构建最稳,觉......
  • abp-vnext-pro 实战(九,前端vue和vben学习)
    vben效果 VbenAdmin(vvbin.cn) 对应的代码在 vue-vben-admin/src/views/demo/page/form/basic/data.tsatmain·vbenjs/vue-vben-admin(github.com){field:'time',component:'RangePicker',label:'起止日期',colProps:{......
  • vue2的源码github下载和本地启动调试源码
    1.下载源码:https://github.com/vuejs/vue2.安装依赖,命令行执行:yarn3.修改package.json的运行脚本scripts里面加上源码map定位的参数,在打包后页面引入使用时可以调试到源码: {"name":"vue",。。。"scripts":{//增加一个start的启动命令加入参数--sourcemap......
  • Vue动态创建组件实例并挂载到body
    方式一importVuefrom'vue'/***@paramComponent组件实例的选项对象*@paramprops组件实例中的prop*/exportfunctioncreate(Component,props){constcomp=new(Vue.extend(Component))({propsData:props}).$mount()document.body.appendChild(......
  • VUE- elementUI使用quill富文本编辑器(编辑文本、上传图片)
    准备工作:安装 yarninstall vue-quill-editormain.js//编辑器importVueQuillEditorfrom'vue-quill-editor'//引入样式import'quill/dist/quill.core.css'import'quill/dist/quill.snow.css'import'quill/dist/quill.bubble.css'......
  • vue实现大文件上传下载
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • Pandas处理excel
    基本使用pandas是一个用于数据处理和分析的python库,提供了许多数据结构,其中最常用的是DataFrame和Series。创建DataFrame:可以使用字典或二维数组来创建Forexample: importpandasaspd data={'A':[1,2,3],'B':[4,5,6]} df=pd.DataFrame(data)读取和写入......
  • 临时导出excel,直接html代码复制进excel里面可以直接变成表格
    临时导出excel,直接html代码复制进excel里面可以直接变成表格 p标签和br会导致分成两个单元格可以在外面的标签身上加,或者br上面加 br{       mso-data-placement:same-cell;    } 这样子br不会被分成另个,只是同一个单元格换行了 开发web系统......
  • vue中,一个参数是一个图片网络地址,当重新上传一个图片替换原来的图片后,地址没变,但是图
    这个问题可能是由于浏览器缓存导致的。为了解决这个问题,你可以向图片的URL地址中添加一个随机参数,以确保每次加载图片时都会从服务器获取最新的图片。你可以使用类似于以下方式来添加随机参数:<img:src="imageUrl+'?timestamp='+Date.now()"/>这样,每次你更新了图片后,URL中......
  • Vue组件缓存之keep-alive正确使用姿势
    先来看一个项目中的需求作为苦逼的前端开发者,我们无时无刻都要面对产品经理提的各种需求,比如下图这个场景场景:从首页的点击导航进入列表页,列表页点击列表进入该数据详情页从详情页返回,希望列表页缓存,不重新渲染数据,这样会提高用户体验。分析一下这样需求,如果是小程序......