0


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

一、前言

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

1、前端页面

2、导出效果

二、准备工作

1、添加表格

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

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

2、绑定数据

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

  1. // el-table的数据源
  2. const tableData = ref([
  3. {
  4. name: "AAAAA",
  5. age: 18,
  6. avatar: "https://element-plus.org/images/element-plus-logo.svg"
  7. },
  8. {
  9. name: "BBBBB",
  10. age: 20,
  11. avatar: "https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-model-cover.png"
  12. },
  13. ]);

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

3、注册事件

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

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

三、实现过程

1、安装依赖

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

  1. npm i js-table2excel --save

2、页面引入

  1. import table2excel from "js-table2excel";

3、方法说明

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

参数一:column,数组;

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

  • title:列名,要显示在excel中的列名称;
  • key:对应数据源中每条数据对象的key;
  • type:值类型,可指定“text、image”;
  • width:指定该列单元格的宽度;
  • height:指定该列单元格的高度;
  1. const column = [
  2. {
  3. title: "Name",
  4. key: "name",
  5. type: "text",
  6. },
  7. {
  8. title: "Age",
  9. key: "age",
  10. type: "text",
  11. },
  12. {
  13. title: "Avatar",
  14. key: "avatar",
  15. type: "image",
  16. width: 150,
  17. },
  18. ];

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

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

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

4、导出方法

  1. // 导出按钮的回调函数
  2. function exportExcelFn() {
  3. const column = [
  4. {
  5. title: "Name",
  6. key: "name",
  7. type: "text",
  8. },
  9. {
  10. title: "Age",
  11. key: "age",
  12. type: "text",
  13. },
  14. {
  15. title: "Avatar",
  16. key: "avatar",
  17. type: "image",
  18. width: 150,
  19. },
  20. ];
  21. table2excel( column, tableData.value, `用户列表${dateNum()}`, "表头:用户列表" );
  22. }

四、完整代码

  1. <template>
  2. <div class="container">
  3. <el-button type="primary" @click="exportExcelFn">导出Excel</el-button>
  4. <el-table :data="tableData" border style="width: auto; margin-top: 10px">
  5. <el-table-column type="index" label="No." align="center" width="100" />
  6. <el-table-column prop="name" label="Name" align="center" />
  7. <el-table-column prop="age" label="Age" align="center" />
  8. <el-table-column label="Avatar" align="center">
  9. <template #default="{row}">
  10. <img :src="row.avatar" alt="" style="width: 160px" />
  11. </template>
  12. </el-table-column>
  13. </el-table>
  14. </div>
  15. </template>
  16. <script setup>
  17. import { ref, reactive } from "vue";
  18. import FileSaver from "file-saver";
  19. import table2excel from "js-table2excel";
  20. // el-table的数据源
  21. const tableData = ref([
  22. {
  23. name: "AAAAA",
  24. age: 18,
  25. avatar: "https://element-plus.org/images/element-plus-logo.svg"
  26. },
  27. {
  28. name: "BBBBB",
  29. age: 20,
  30. avatar: "https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-model-cover.png"
  31. },
  32. ]);
  33. // 导出按钮的回调函数
  34. function exportExcelFn() {
  35. const column = [
  36. {
  37. title: "Name",
  38. key: "name",
  39. type: "text",
  40. },
  41. {
  42. title: "Age",
  43. key: "age",
  44. type: "text",
  45. },
  46. {
  47. title: "Avatar",
  48. key: "avatar",
  49. type: "image",
  50. width: 150,
  51. },
  52. ];
  53. table2excel(column, tableData.value, `用户列表${dateNum()}`, "表头:用户列表");
  54. }
  55. // 获取日期 yyyy-MM-dd
  56. function dateNum() {
  57. let date = new Date();
  58. let year = date.getFullYear();
  59. let month =
  60. date.getMonth() + 1 > 9 ? date.getMonth() + 1 : "0" + (date.getMonth() + 1);
  61. let day = date.getDate() > 9 ? date.getDate() : "0" + date.getDate();
  62. return year + "-" + month + "-" + day;
  63. }
  64. </script>
  65. <style lang="scss" scoped>
  66. </style>

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

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

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

标签: excel vue.js 前端

本文转载自: https://blog.csdn.net/m0_65029152/article/details/135644503
版权归原作者 白菜不太菜 所有, 如有侵权,请联系我们删除。

“前端导出包含图片的el-table列表为excel文件”的评论:

还没有评论