vue2.0 + element UI 中 el-table 数据导出Excel (多级表格适用,无分页版)

本文详细介绍如何在Vue项目中实现导出Excel功能,包括安装依赖、代码示例及多级表头表格的导出方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 安装相关依赖

npm install --save xlsx file-saver

2、组件里头引入

import FileSaver from 'file-saver'
import XLSX from 'xlsx'

3、组件methods里写一个方法

   exportExcel () {
         /* generate workbook object from table */
         var wb = XLSX.utils.table_to_book(document.querySelector('#outTable'))
         /* get binary string as output */
         var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
         try {
             FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), 'sheetjs.xlsx')
         } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) }
         return wbout
     },

注意:XLSX.uitls.table_to_book( 放入的是table 的DOM 节点 ) ,sheetjs.xlsx 即为导出表格的名字,可修改!

4.表格代码

<el-table   id=“outTable” :data="jqData" style="width: 100%" max-height="700" show-summary>
</el-table>

5.导出按钮添加点击事件,执行exportExcel()方法

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

  

贴下项目使用代码,项目内使用的是多级表头的表格,同样适用

父组件内

 

 

 

 子组件 表格组件3(多级表头表格)

 

转载于:https://www.cnblogs.com/chr506029589/p/11454154.html

### 实现 Element UI 中 `el-table` 组件与多标签功能集成 为了实现在多个标签中使用 `el-table` 并解决切换标签时表格列宽闪烁的问题,可以采取以下措施: #### 解决表头宽度重置问题 当在 `el-tabs` 下嵌套 `el-table` 时,每次切换标签都会触发重新渲染,这可能导致表格列宽从默认值逐渐调整至实际内容所需宽度的过程可见。为了避免这种视觉上的不连贯感,在初始化阶段应确保每张表格的列宽被固定下来。 ```html <template> <div id="app"> <!-- 使用 ref 属性来获取 DOM 节点 --> <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane label="用户管理" name="first"> <el-table :data="tableData" style="width: 100%" border stripe fit highlight-current-row> <!-- 设置固定的列宽 --> <el-table-column prop="date" label="日期" width="180"></el-table-column> <el-table-column prop="name" label="姓名" width="180"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </el-tab-pane> <el-tab-pane label="配置管理" name="second">...</el-tab-pane> </el-tabs> </div> </template> <script> export default { data() { return { activeName: 'first', tableData: [ // 表格数据... ] }; }, methods: { handleClick(tab, event) { console.log(tab, event); } } }; </script> ``` 通过设定 `<el-table-column>` 的 `width` 属性为具体数值,可有效防止因自动计算而产生的瞬态变化[^1]。 #### 增强用户体验——支持拖拽调整列顺序 为了让用户能够自定义表格布局,可以在特定条件下允许他们通过鼠标操作改变各字段的位置。为此需向目标列添加 `class-name="allowDrag"` 特性,并配合 JavaScript 完成交互逻辑处理[^2]。 ```javascript // Vue实例方法内增加如下代码片段用于监听并响应用户的拖放行为 mounted () { const allowDragColumns = this.$refs['yourTableRef'].$el.querySelectorAll('.allowDrag'); Array.from(allowDragColumns).forEach((columnElm) => { columnElm.draggable = true; columnElm.addEventListener('dragstart', function(event){ event.dataTransfer.setData("text/plain", null); // 防止浏览器尝试打开链接或其他默认动作 }); document.body.addEventListener('drop', (event)=>{ let targetColumnIndex = [...this.$refs['yourTableRef'].$el.children].indexOf(event.target.closest('[role="columnheader"]')); if(targetColumnIndex >= 0 && !isNaN(parseInt(event.clientX))){ // 执行交换两列位置的操作 // ... // 刷新视图以反映最新的排序状态 this.$nextTick(() => {}); } event.preventDefault(); }); }) } ``` 请注意上述伪代码仅作为概念演示之用;实际项目开发过程中建议采用成熟的第三方库如 Sortable.js 来简化此类复杂度较高的前端特性实现。 #### 数据导出功能扩展 除了展示和编辑外,有时还需要提供将当前显示的数据保存为文件的能力。借助 SheetJS 库(也称为xlsx),只需几行简单的脚本就能轻松达成此目的[^3]。 ```javascript methods: { exportExcel(){ import('@/vendor/Export2Excel').then(excel => { // 动态加载依赖项提高性能 const multiHeader = [['编号','名称','描述']]; // 多级表头示例 const header = ['id', 'title', 'description']; // 单层表头映射关系 const filterVal = ['id', 'title', 'desc']; // 对象键名列表 const list = this.tableData.map(item=>filterVal.map(key=>item[key])); excel.export_json_to_excel({ multiHeader, header, data:list, filename:'example' }); }); } } ``` 以上就是关于如何利用 Element UI 构建带有分导航栏的应用程序以及针对其中可能遇到的技术难题提出的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值