前端导出包含图片的el-table列表为excel文件

avatar
作者
筋斗云
阅读量:0

一、前言

1、前端页面

2、导出效果

二、准备工作

1、添加表格

2、绑定数据

3、注册事件

三、实现过程

1、安装依赖

2、页面引入

3、方法说明

4、导出方法

 四、完整代码


一、前言

记录一下,在前端实现导出el-table表格,带有图片文件;

1、前端页面

2、导出效果

二、准备工作

1、添加表格

在页面上添加一个el-table组件,用来展示数据;

<el-table :data="tableData" border style="width: auto; margin-top: 10px">     <el-table-column type="index" label="No." align="center" width="100" />     <el-table-column prop="name" label="Name" align="center" />     <el-table-column prop="age" label="Age" align="center" />     <el-table-column label="Avatar" align="center">     <template #default="{row}">         <img :src="row.avatar" alt="" style="width: 160px" />     </template>     </el-table-column> </el-table>

2、绑定数据

给el-table绑定数据源;注意:这边采用的是网络图片,也可以是后端返回的图片;

// el-table的数据源 const tableData = ref([   {     name: "AAAAA",     age: 18,     avatar: "https://element-plus.org/images/element-plus-logo.svg"   },   {     name: "BBBBB",     age: 20,     avatar: "https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-model-cover.png"   }, ]);

绑定好之后,我们可以看到页面上的数据展示情况;

3、注册事件

接下来,页面上添加一个导出按钮,用来出发导出excel的事件;

<el-button type="primary" @click="exportExcelFn">导出Excel</el-button>
// 导出按钮的回调函数 function exportExcelFn() {     // ...... }

三、实现过程

1、安装依赖

终端输入下列代码,安装js-table2excel依赖包,用于导出带有图片的excel;

npm i js-table2excel --save

2、页面引入

import table2excel from "js-table2excel";

3、方法说明

table2excel(column, data, title, header),该方法用于导出数据,并直接触发浏览器的下载功能;可以传入四个参数;

参数一:column,数组;

指定数据列的格式;colunm中的元素为每个列的指定格式,包含:

  • title:列名,要显示在excel中的列名称;
  • key:对应数据源中每条数据对象的key;
  • type:值类型,可指定“text、image”;
  • width:指定该列单元格的宽度;
  • height:指定该列单元格的高度;
const column = [     {         title: "Name",         key: "name",         type: "text",     },     {         title: "Age",         key: "age",         type: "text",     },     {         title: "Avatar",         key: "avatar",         type: "image",         width: 150,     }, ];

参数二:data,数组;指定导出的数据源;也就是前面el-table中绑定的数据源;

参数三:title,字符串;指定导出excel的文件名;

参数四:header,文本;指定导出工作表的表头信息;

4、导出方法

// 导出按钮的回调函数 function exportExcelFn() {   const column = [     {       title: "Name",       key: "name",       type: "text",     },     {       title: "Age",       key: "age",       type: "text",     },     {       title: "Avatar",       key: "avatar",       type: "image",       width: 150,     },   ];   table2excel( column, tableData.value, `用户列表${dateNum()}`, "表头:用户列表" ); }

 四、完整代码

<template>   <div class="container">     <el-button type="primary" @click="exportExcelFn">导出Excel</el-button>     <el-table :data="tableData" border style="width: auto; margin-top: 10px">       <el-table-column type="index" label="No." align="center" width="100" />       <el-table-column prop="name" label="Name" align="center" />       <el-table-column prop="age" label="Age" align="center" />       <el-table-column label="Avatar" align="center">         <template #default="{row}">           <img :src="row.avatar" alt="" style="width: 160px" />         </template>       </el-table-column>     </el-table>   </div> </template> <script setup> import { ref, reactive } from "vue";  import FileSaver from "file-saver";  import table2excel from "js-table2excel";  // el-table的数据源 const tableData = ref([   {     name: "AAAAA",     age: 18,     avatar: "https://element-plus.org/images/element-plus-logo.svg"   },   {     name: "BBBBB",     age: 20,     avatar: "https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-model-cover.png"   }, ]);  // 导出按钮的回调函数 function exportExcelFn() {   const column = [     {       title: "Name",       key: "name",       type: "text",     },     {       title: "Age",       key: "age",       type: "text",     },     {       title: "Avatar",       key: "avatar",       type: "image",       width: 150,     },   ];   table2excel(column, tableData.value, `用户列表${dateNum()}`, "表头:用户列表"); }  // 获取日期 yyyy-MM-dd function dateNum() {   let date = new Date();   let year = date.getFullYear();   let month =     date.getMonth() + 1 > 9 ? date.getMonth() + 1 : "0" + (date.getMonth() + 1);   let day = date.getDate() > 9 ? date.getDate() : "0" + date.getDate();   return year + "-" + month + "-" + day; }  </script> <style lang="scss" scoped> </style> 

==================================================================== 

这次的记录比较粗糙,还有一些未解决的问题,后续再补充完善吧~

走过路的大佬们,还请多多指点!! 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!