Vue3 Element Plus table导出Excel表格

11 篇文章 2 订阅

依赖

安装所需要的依赖
分别是 xlsxfile-saver

npm install --save xlsx file-saver

依赖引入

// main.js (全局Ï)
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'
Vue.prototype.$FileSaver = FileSaver;
Vue.prototype.$XLSX = XLSX;

// 使用时引入
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'

代码实现

el-table 组件上添加 ID
这里模态框的作用是自定义导出的文件名称(根据自己需求加或者不加)

完整代码

<template>
    <div class="index">
        <el-button type="primary" @click="roleLeadingOut">导出</el-button><!-- 导出按钮 -->
        <!-- 表格组件 -->
        <el-table :data="tableData" style="width: 100%" border id="el-table" ref="tableRef">
            <el-table-column type="selection" width="50" align="center" />
            <el-table-column label="姓名" prop="name" />
            <el-table-column label="性别" prop="age" width="180" />
            <el-table-column label="电话" prop="phone" width="180" />
            <el-table-column label="电子邮件" prop="email" width="180" />
            <el-table-column label="介绍" prop="introduce" width="260" />
        </el-table>
        <!-- 模态框 -->
        <el-dialog v-model="dialog" title="表格导出" width="30%" @close="close">
            <el-input v-model="name" placeholder="请输入导出文件的文件名"></el-input>
            <el-alert title="默认文件名为(导出测试)" type="info" :closable="false" style="margin-top: 10px;" />
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="dialog = false">取消</el-button>
                    <el-button type="primary" @click="save">
                        确定
                    </el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>
<script setup lang="ts">
import { reactive, toRefs, ref, onMounted, nextTick, getCurrentInstance } from 'vue'

import { ElMessage, ElMessageBox } from 'element-plus'

// 依赖引入
import FileSaver from "file-saver";
import * as XLSX from 'xlsx'

// 用来访问内部组件实例
const { proxy } = getCurrentInstance() as any;

const state = reactive({
    tableData: [] as any, // 表格数据
    dialog: false, // 模态框显示、隐藏
    name: '' // 自定义文件名
})

const { tableData, dialog, name } = toRefs(state)

onMounted(() => {
	// 获取数据
    getDataList()
})

function getDataList() {
    state.tableData = [
        {
            name: '张三',
            age: '男',
            phone: '16784938888',
            email: '1678498888@qq.com',
            introduce: '张三贼懒,介绍都没',
        },
        {
            name: '李四',
            age: '女',
            phone: '16784936666',
            email: '1678496666@qq.com',
            introduce: '李四也很懒,介绍都没',
        },
        {
            name: '王五',
            age: '男',
            phone: '16784935555',
            email: '1678495555@qq.com',
            introduce: '王五说举个例子🌰',
        },
    ]
}

// 表格导出excel
function roleLeadingOut() {
	// getSelectionRows() 是el-table官方提供的方法(返回当前表格选中的行)
	// 表格没有指定导出数据时是全部导出(否则是替换表格数据)
    const selectList = proxy?.$refs.tableRef.getSelectionRows()
    if (selectList.length) {
        state.tableData = proxy?.$refs.tableRef.getSelectionRows()
    }
    state.dialog = true
}

function close() {
	// 模态框取消,重新获取数据
    getDataList()
}

function save() {
    nextTick(function () {
        let filename = ''
        const xlsxParam = { raw: true } //转化成Excel使用原始格式
        const elTable = XLSX.utils.table_to_book(document.getElementById('el-table'), xlsxParam)
        if (state.name === '') {
        	// 默认导出文件名
            filename = '导出测试.xlsx'
        } else {
            filename = state.name += '.xlsx'
        }
        const wbout = XLSX.write(elTable, { bookType: 'xlsx', bookSST: true, type: 'array' })
        try {
            FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), filename)
        } catch (e) {
            if (typeof console !== 'undefined') {
                console.log(e, wbout)
            }
        }
        return wbout
    })
}
</script>

<style scoped lang="scss">
::v-deep(.el-dialog__body) {
    padding: 20px;
}
</style>

在这里插入图片描述

结尾

不支持表格中存在图片到处excel表格

表格带图片导出可以看 Element Plus 表格导出excel文件(带图片)

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将Vue 3中的el-table导出Excel,你可以使用以下步骤: 1. 首先,你需要安装`xlsx`和`file-saver`包。在终端中运行以下命令: ``` npm install xlsx file-saver ``` 2. 在你的Vue组件中,导入所需的库: ```javascript import XLSX from 'xlsx'; import { saveAs } from 'file-saver'; ``` 3. 创建一个方法来导出表格数据为Excel文件: ```javascript exportData() { // 获取表格数据 const tableData = this.$refs.table.data; // 创建一个工作簿 const workbook = XLSX.utils.book_new(); // 创建一个工作表 const worksheet = XLSX.utils.json_to_sheet(tableData); // 将工作表添加到工作簿中 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); // 将工作簿转换为Excel文件的二进制数据 const excelData = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); // 创建一个Blob对象,并保存为Excel文件 const blob = new Blob([excelData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); saveAs(blob, 'table_data.xlsx'); } ``` 4. 在el-table组件上添加一个导出按钮,并调用`exportData`方法: ```html <el-table ref="table"> <!-- 表格内容 --> </el-table> <el-button @click="exportData">导出Excel</el-button> ``` 以上代码将会将el-table中的数据导出为名为`table_data.xlsx`的Excel文件。请确保在`<el-table>`标签上设置了ref属性,以便在`exportData`方法中引用表格数据。 这是使用Vue 3和Element Plus的示例,如果你在项目中使用了其他UI库或版本,请相应地调整代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值