首页 > 其他分享 >58.请使用vue3+vite+typescript+element-plus+setup语法糖,使用xlsx和file-saver实现保存excel功能。我的el-table表有分页数据。导出的ex

58.请使用vue3+vite+typescript+element-plus+setup语法糖,使用xlsx和file-saver实现保存excel功能。我的el-table表有分页数据。导出的ex

时间:2023-07-20 11:24:12浏览次数:37  
标签:el const 分页 导出 excel 2016 name

 1 <template>
 2   <div>
 3     <el-table
 4       :data="mergedTableData"
 5       border
 6       stripe
 7     >
 8       <!-- 表头 -->
 9       <el-table-column
10         prop="date"
11         label="Date"
12       ></el-table-column>
13       <el-table-column
14         prop="name"
15         label="Name"
16       ></el-table-column>
17       <el-table-column
18         prop="address"
19         label="Address"
20       ></el-table-column>
21     </el-table>
22 
23     <el-button @click="exportExcel">导出 Excel</el-button>
24   </div>
25 </template>
26 
27 <script setup lang="ts">
28 import { ref, onMounted } from 'vue';
29 import XLSX from 'xlsx';
30 import { saveAs } from 'file-saver';
31 
32 const pageSize = 2;
33 const totalItems = 4;
34 const tableData = ref([]);
35 const mergedTableData = ref([]);
36 
37 onMounted(() => {
38   fetchData();
39 });
40 
41 // 模拟异步获取分页数据
42 function fetchData() {
43   setTimeout(() => {
44     const data = [
45       {
46         date: '2016-05-03',
47         name: 'Tom',
48         address: 'No. 189, Grove St, Los Angeles',
49       },
50       {
51         date: '2016-05-02',
52         name: 'Tom',
53         address: 'No. 189, Grove St, Los Angeles',
54       },
55       {
56         date: '2016-05-04',
57         name: 'Tom',
58         address: 'No. 189, Grove St, Los Angeles',
59       },
60       {
61         date: '2016-05-01',
62         name: 'Tom',
63         address: 'No. 189, Grove St, Los Angeles',
64       },
65     ];
66 
67     tableData.value = data; // 存储原始数据
68 
69     const mergedData = [];
70     const totalPages = Math.ceil(data.length / pageSize);
71     for (let page = 1; page <= totalPages; page++) {
72       const start = (page - 1) * pageSize;
73       const end = start + pageSize;
74       mergedData.push(...data.slice(start, end));
75     }
76 
77     mergedTableData.value = mergedData;
78   }, 500);
79 }
80 
81 // 导出 Excel
82 function exportExcel() {
83   const workbook = XLSX.utils.book_new();
84   const worksheet = XLSX.utils.json_to_sheet(mergedTableData.value);
85   XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet 1');
86   const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
87   const excelData = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
88   saveAs(excelData, 'data.xlsx');
89 }
90 </script>

在上述代码中,我们做了以下修改:

  1. 创建一个新的变量 mergedTableData,用于存储合并后的表格数据。
  2. 在 fetchData 方法中,首先将原始数据存储到 tableData 中,然后根据每页大小将数据合并为 mergedTableData
  3. 在导出 Excel 时,使用 mergedTableData 作为源数据进行导出。

这样,当你点击 "导出 Excel" 按钮时,会将所有分页中的数据合并为一个表格,然后导出为 Excel 文件并自动下载。

标签:el,const,分页,导出,excel,2016,name
From: https://www.cnblogs.com/mxx520/p/17567814.html

相关文章

  • mysql批量导入excel数据
    Mysql批量导入Excel数据教程1.整体流程首先,我们来看一下整个批量导入Excel数据的流程。具体步骤如下:步骤描述1读取Excel文件2解析Excel文件数据3创建数据库连接4创建数据表5插入数据到数据库表下面我们将逐步解释每个步骤需要做什么,以及代码的实......
  • 57.表中数据导出excel
    consttableData=[{date:'2016-05-03',name:'Tom',address:'No.189,GroveSt,LosAngeles',},{date:'2016-05-02',name:'Tom',address:'No.189,GroveSt,LosAngeles',},{date:'......
  • Perkins Engines: Reliable Power in Harsh Environments and High-Strength Operatio
    PerkinsEngines:ReliablePowerinHarshEnvironmentsandHigh-StrengthOperationsHelloeveryone!TodayIwouldliketosharewithyouapowerfulenginedesignedtocopewithharshenvironmentsandhigh-intensityworkingconditions-thePerkinsengine.W......
  • Elm 和 Jetpack Compose 殊途同归及 MVVM 缺点分析
    Html.lazy·AnIntroductiontoElm可能搞vdom的都会到lazyrenderer这一步,react可能也可以这么搞或者已经这么搞了我不知道,Elm提到的keyedreact也是一个主要特性:Html.keyed·AnIntroductiontoElm但添加元素、删除元素、元素交换位置、以及元素移动位置的问题真......
  • Excel下载加水印
    起因:出于数据安全与保护目的,需要对站点所有导出的excel文件自动加上水印解决办法:拦截器使用拦截器统一处理,对已有代码基本上做到零侵入,不影响现有逻辑使用第三组件添加水印注意事项搜索Excel加水印,请勿以watermark作为关键字,准确关键字应为BackgroundImage第三方组件存......
  • selenium元素操作无效的解决
    1.首先确认元素定位是否正确可以尝试打印元素数据,看是否正确捕获元素,若是未捕获,尝试其他定位方式*.getText()2)考虑是否不在同一个iframe->切换到同一个iframe3)元素遮盖,未显示等->滚动到正确位置(一般滚动到元素出现,如果是滚动到元素本身出现不行,可以尝试滚动到其他元素出现......
  • DevExpress WinForms TreeList控件,让业务数据展示更清晰!(二)
    DevExpressWinForms的TreeList控件是一个功能齐全、数据感知的TreeView-ListView的混合体,它可以以树形、网格或两者结合的形式显示数据信息。无论是数据绑定模式还是非绑定模式,都具有完整的数据编辑支持。在上文中(点击这里回顾>>),我们为大家介绍了TreeListUI/UX的自定义、受Exce......
  • python helium
    如何实现“PythonHelium”简介在本文中,我将向你展示如何使用Python和Helium库来自动化网页操作。Helium是一个轻量级的Python库,可以模拟人类在网页上的各种操作,如点击、输入文本、选择下拉菜单等。通过使用Helium,你可以编写简洁而高效的自动化脚本。步骤概述下面是实现“Pytho......
  • el-table表格行拖拽排序或者电子件列表拖拽排序
    用到sortablejs 中文官网,http://www.sortablejs.com/为了页面中可以复用,在common.js下,封装了公用方法import Sortable from‘sortablejs’rowDrop(selector,params,callback){lettbody=document.querySelector(selector)if(!tbody){return}if(window.tableSortab......
  • python win32com 写入excel
    如何使用Python的win32com库写入Excel作为一名经验丰富的开发者,我可以教会你如何使用Python的win32com库来实现在Excel中写入数据的功能。下面是整个流程的步骤表格:步骤描述1导入所需的库2创建Excel应用程序对象3打开或创建Excel工作簿4选择或创建工作表......