首页 > 其他分享 >如何使用xlsx和file-saver插件实现导入导出

如何使用xlsx和file-saver插件实现导入导出

时间:2024-06-22 12:01:05浏览次数:11  
标签:xlsx 插件 const XLSX saver Excel workbook tableData

首先,安装xlsx和file-saver插件在组件中引入

import * as XLSX from 'xlsx';
import FileSaver from 'file-saver';
<div>
    <!-- 导入表格 -->
    <label for="import-excel">导入表格:</label>
    <input id="import-excel" type="file" accept=".xlsx, .xls" @change="handleImport">
    <br><br>
    <!-- 导出表格 -->
    <el-button type="primary" @click="handleExport">导出表格</el-button>
    <br><br>
    <!-- 表格展示 -->
    <el-table :data="tableData" :columns="tableColumns">
      <el-table-column prop="姓名" label="姓名" />
          <el-table-column prop="年龄" label="年龄" sortable />
          <el-table-column prop="爱好" label="爱好" sortable />
    
    </el-table>
  </div>

导出的方法

handleExport() {

      const worksheet = XLSX.utils.json_to_sheet(this.tableData);

      const workbook = XLSX.utils.book_new();

      XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');

      const buffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });

      const blob = new Blob([buffer], { type: 'application/octet-stream' });

      FileSaver.saveAs(blob, 'table.xlsx');

    },

注释:

  1. const worksheet = XLSX.utils.json_to_sheet(this.tableData);

    • 首先,使用 XLSX.utils.json_to_sheet 方法将 Vue 组件中的 tableData 数组转换为一个 Excel 表格的工作表对象 worksheettableData 应该是一个包含表格数据的数组。

  2. const workbook = XLSX.utils.book_new();

    • 创建一个新的 Excel 工作簿对象 workbook,用于存储所有的工作表。

  3. XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');

    • 将之前创建的工作表 worksheet 添加到工作簿 workbook 中,并指定工作表的名称为 'Sheet1'

  4. const buffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });

    • 使用 XLSX.write 方法将工作簿对象 workbook 写入一个 Excel 文件的二进制数据。在这里,指定了输出文件类型为 'xlsx',并且指定输出的数据类型为数组。

  5. const blob = new Blob([buffer], { type: 'application/octet-stream' });

    • 创建一个包含 Excel 文件二进制数据的 Blob 对象 blob,并指定 MIME 类型为 'application/octet-stream',表示这是一个二进制流文件。

  6. FileSaver.saveAs(blob, 'table.xlsx');

    最后一步是使用 FileSaver.saveAs 方法将生成的 Blob 对象保存为一个名为 'table.xlsx' 的 Excel 文件。这样用户就可以通过下载或者保存操作获取这个生成的 Excel 文件。

导入的方法

handleImport(event) {
      const file = event.target.files[0];
      if (!file) return;
      const reader = new FileReader();
      reader.readAsBinaryString(file);
      reader.onload = (e) => {
        const data = e.target.result;
        const workbook = XLSX.read(data, { type: 'binary' });
        const sheetName = workbook.SheetNames[0];
        const worksheet = workbook.Sheets[sheetName];
        const json = XLSX.utils.sheet_to_json(worksheet, { blankrows: false });
        console.log(sheetName, 111)
        this.renderTable(json);
      };
      reader.onerror = (error) => console.error(error);
    },

注释:

  1. 这个 handleImport 方法用于处理用户上传文件的事件,并实现从上传的 Excel 文件中读取数据,最终将数据以 JSON 格式展示在表格中或进行其他处理。以下是该方法的主要思路总结:

    1. 用户触发上传文件事件,通过 event.target.files[0] 获取用户上传的文件对象。

    2. 检查是否成功获取到文件,若未获取到则终止后续操作。

    3. 创建 FileReader 对象,用于读取用户上传文件的内容。

    4. 调用 readAsBinaryString 方法开始读取文件内容,以二进制字符串形式进行读取。

    5. 当文件读取完成后,通过 reader.onload 回调函数处理读取到的文件内容。

    6. 获取读取到的文件内容,即 Excel 文件的二进制字符串数据。

    7. 使用 XLSX.read 方法解析二进制字符串数据为 Excel 工作簿对象,并指定数据类型为 'binary'

    8. 获取工作簿中第一个工作表的名称,并根据名称获取对应的工作表对象。

    9. 将工作表对象转换为 JSON 格式的数据,不包含空行。

    10. 打印工作表名称以便调试和确认导入的数据准确性。

    11. 调用 renderTable 方法,将转换后的 JSON 数据传递给该方法,用于在表格中展示或进行其他处理。

渲染

renderTable(data) {
      const columns = Object.keys(data[0]).map((key, index) => ({
        label: `Column ${index + 1}`,
        prop: key,
      }));
      const tableData = data;
      this.tableColumns = columns;
      this.tableData = tableData;
      console.log(this.tableColumns, this.tableData);
    }

注释:

  1. 通过 Object.keys(data[0]) 获取传入数据的第一行键(列名),然后使用 map 方法遍历生成一个新的数组 columns,其中每个元素是一个对象,包含两个属性:

    • label: 每列的显示标签,格式为 Column {index + 1},从 1 开始递增。

    • prop: 对应数据中的键,用于在表格中显示对应列的数据。

  2. 将传入的数据赋值给变量 tableData,准备用于表格展示。

  3. 将处理后的列信息赋值给组件的 tableColumns 属性,以便在表格中显示列名和设置列的属性。

  4. 将处理后的数据赋值给组件的 tableData 属性,用于在表格中显示数据内容。

  5. 通过 console.log 打印处理后的列信息和数据内容,以便调试和确认展示在表格中的数据是否正确。

标签:xlsx,插件,const,XLSX,saver,Excel,workbook,tableData
From: https://blog.csdn.net/liu198273/article/details/139771709

相关文章

  • 对比Vue2/Vue3项目如何自定义插件
    学习目标:对比Vue2/Vue3项目如何自定义插件学习内容:插件(Plugins)是一种能为Vue添加全局功能的工具代码。一个插件可以是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身。安装函数会接收到安装它的应用实例传递给Vue.use()/ app.use() 的额外选项作......
  • WordPress插件:子比zibll主题插件 炙焰美化全开源插件V3.2
    在网络世界中,开源内容管理系统(CMS)已经成为了网站构建的关键工具之一。WordPress,作为最受欢迎的开源CMS之一,其广泛的应用及其灵活性使得它成为了创建和管理各种类型网站的理想选择。而Zibll主题插件,作为专为WordPress设计的主题插件,其丰富的功能更是让用户在创建和定制网站......
  • 通义灵码上线 Visual Studio 插件市场啦!
    通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。通义灵码熟练掌握Java、Python、Go、C++等20......
  • 通义灵码上线 Visual Studio 插件市场啦!
    通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。通义灵码熟练掌握Java、Python、Go、C++等20......
  • vscode python编程入门与插件推荐
    使用背景作者是一名ai测开工程师,工作环境中通常会使用到pythonshellpostgresql数据库jupyter,shh工具git版本控制等,因此向选用一个适合自己的文本编辑软件,经过长时间磨合,最终选择VScode作为我的工作软件优点内存占用率低,集成度高,开源免费插件推荐AI助手:codegeex此插件......
  • 最新扣子教程:如何导入扣子插件,完全免费Coze教程
    ......
  • 中文检测插件
    大家都知道,做出海应用,尤其是在一些对中国不友好的国家做业务。全面去中文化至关重要。对于开发而言,在代码层如果只靠人为控制这个变量,尤其艰难。所以给大家安利一个我们自研的中文检测插件,他能在您开发过程中时刻检测您的输入是否含有中文。大家先看下效果。如果您有需要,烦......
  • apisix~为自定义插件设计一个configmap脚本
    configMapKubernetes中的ConfigMap是一种用来存储配置数据的API资源,它允许您将配置信息以键值对的形式保存,并在容器中使用这些配置信息。ConfigMap提供了一种将配置数据与应用程序解耦的方式,使得应用程序可以动态地获取配置而无需重新构建镜像。以下是ConfigMap的一些特......
  • 百度网盘6月最新插件 网速亲测50Mb不限速
    【应用名称】百度网盘【应用版本】2024双插件版6月最新【应用大小】220MB【适用平台】win11【应用简介】更新了图文教程百度网盘是国内资源生态最大的在线存储服务提供商,提供免费和收费的文件存储,备份,共享等文件管理等功能.百度网盘客户端的百度网盘电脑版本次依旧......
  • linux下PyCharm无法识别导入包的问题(xlsxwriter)
    在linux安装pycharm,有的包无法识别自动安装,并且在pycharm的python软件包安装窗口可以搜索出对应软件包,但是点击安装无反应。在终端使用pip/pip3installxxx,提示error:externally-managed-environmentThisenvironmentisexternallymanagedToinstallPythonpackagessyst......