element-ui table 导出Excel 封装 VUE 版本

话不多说直接上代码

第一步安装依赖:

npm install --save xlsx file-saver

然后在项目目录建立一个 工具类
在这里插入图片描述
然后添加 js 文件 在这里插入图片描述

代码如下:

// 引入Excel表格依赖
import FileSaver from "file-saver";
import XLSX from "xlsx";

/**
 * 
 * @param {String} Element //表格元素ID
 * @param {String} bookType //输出文件类型
 * @param {String} type //输入类型
 * @param {String} fileName //文件名称
 * @returns 
 */

/**
 * 说明:
 * 1.Blob 对象表示一个不可变、原始数据的类文件对象。
 * 2.Blob 表示的不一定是JavaScript原生格式的数据。
 * 3.File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
 * 4.返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。
 * 
 * 用法:
 * 1.Element 表格元素ID
 * 2.bookType 输出文件类型,默认 xlsx
 * 3.type 输入类型,默认 array
 * 4.fileName 文件名称 默认 ParkingMonthTransaction
 */

// 导出数据
export function xlExport(Element,bookType,type, fileName) {
    /* 从表生成工作簿对象 */
    
    if(!Element){
        console.error("请添加元素ID");
        return;
    }
    
    //导出Excel并解决数字列科学计数法问题
    let xlsxParam = { raw: true };

    let wb = XLSX.utils.table_to_book(document.querySelector(Element),xlsxParam)
    /* 获取二进制字符串作为输出 */
    let wbout = XLSX.write(wb, {
        bookType: bookType || 'xlsx',
        bookSST: true,
        type: type || 'array'
    })
    try {
        FileSaver.saveAs(
            new Blob([wbout], { type: 'application/octet-stream' }),
            //设置导出文件名称
            fileName && bookType? `${fileName}.${bookType}` :  `表格.xlsx`
        )
    } catch (e) {
        if (typeof console !== 'undefined') console.log(e, wbout)
    }
    return wbout
}

使用方式:

标题html

 
<button @click="exportExcel">导出</button>

给table添加id

<el-table id="out-table" :data="tableData" >
  这是代码块
</el-table>

javascript

//导入  
import { xlExport } from "@/utils/export";

methods:{
	//定义导出Excel表格事件
    exportExcel() {
      xlExport(
        "#out-table",
        "xlsx",
        "array",
        this.merchant ? `${this.merchant}` : "Excel名称"
      );
    },
}

后面的参数可以没有(可以默认) 但 dom ID 必须要有

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue基于Element UI Table的二次封装可以通过创建一个自定义的组件来实现。以下是一个简单的示例,演示了如何封装一个基于Element UI Table的组件: ```vue <template> <el-table :data="tableData" :row-key="rowKey" :height="height"> <!-- 渲染表头 --> <el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label"> <!-- 自定义插槽 --> <template slot-scope="scope"> <slot :column="column" :scope="scope"></slot> </template> </el-table-column> </el-table> </template> <script> export default { name: 'CustomTable', props: { tableData: { type: Array, required: true }, columns: { type: Array, required: true }, rowKey: { type: String, required: true }, height: { type: String, default: 'auto' } } } </script> ``` 在这个示例中,我们创建了一个名为`CustomTable`的组件。它接受`tableData`、`columns`、`rowKey`和`height`作为props,分别表示表格数据、表格列配置、行数据的唯一标识以及表格的高度。 在模板中,我们使用`el-table`和`el-table-column`来渲染Element UI的表格。我们使用了`v-for`指令来循环渲染表格列,并通过`slot-scope`来传递数据给插槽。插槽可以在父组件中定义,并在插槽中使用自定义的组件来渲染表格单元格内容。 通过这种方式,我们可以在父组件中使用这个封装的自定义表格组件,并通过插槽来定制表格的内容和样式。 希望这个简单的示例能帮助到你进行Vue基于Element UI Table的二次封装。如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值