VUE2 + ElementUI 将Table数据导出为Excel文件——vue-json-excel

文章介绍了在VUE2项目中结合ElementUI,利用vue-json-excel组件实现前端表格数据导出为Excel文件的解决方案。作者比较了三种不同的方法,包括通过创建下载按钮、使用xlsx和file-saver插件,最终选择了vue-json-excel,因为它简单易用且满足需求。

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

VUE2 + ElementUI 将Table数据导出为Excel文件——vue-json-excel

最近做前端开发遇到一个需求,需要实现在前端将table里的数据导出问excel文件
于是在网上查了好几种方式,但是都不是很好用,最后看中了vue-json-excel这个组件
在此记录一下,方便以后查询

方案一

通过js动态创建一个下载按钮实现下载

这是在网上找到的第一种方式,我尝试了一下只能实现下载下来,得到的却不是excel,而是一堆Object,代码如下:

let url = window.URL.createObjectURL(new Blob(this.tableData))
let link= document.createElement('a')
link.style.display='none'
link.href=url
let filename = this.tableDataType + '.xlsx';
link.setAttribute('download', filename)
document.body.appendChild(link)
link.click()

结果如下:
方案一的结果
原文链接:https://blog.csdn.net/nanchen_J/article/details/123134430

方案二

通过xlsx和file-saver插件实现导出Excel

安装依赖

npm install file-saver
npm install xlsx

在main.js中设置全局配置
该步骤可以省略,加入全局配置只是方便复用

// vue中导出excel表格模板
import FileSaver from 'file-saver'
import XLSX from 'xlsx'
  
Vue.prototype.$FileSaver = FileSaver; //设置全局
Vue.prototype.$XLSX = XLSX; //设置全局

方法实现

exportExcel() {
  // table 是表格组件的ID
  let tables = document.getElementById("table");
  let table_book = this.$XLSX.utils.table_to_book(tables);
  var table_write = this.$XLSX.write(table_book, {
    bookType: "xlsx",
    bookSST: true,
    type: "array",
  });
  try {
    this.$FileSaver.saveAs(
      new Blob([table_write], { type: "application/octet-stream" }),
      "sheetjs.xlsx"
    );
  } catch (e) {
    if (typeof console !== "undefined") console.log(e, table_write);
  }
  return table_write;
}

该方案,我并没有尝试,因为我觉得太过繁琐,而且还要两个插件
原文链接:https://www.jb51.net/article/222813.htm

方案三

使用vue-json-excel组件实现导出

第一步 安装依赖

npm install vue-json-excel

第二步 main.js全局配置

// 导出Excel文件组件
import JsonExcel from 'vue-json-excel';
Vue.component('downloadExcel', JsonExcel)

组件调用

<download-excel :data='tableData' :fields='json_fields' :name='`${tableDataType}.xlsx`'>
  <el-button type='primary'>导出</el-button>
</download-excel>
  • tableData 是将要导出的表格数据,只要能渲染el-table,就不需要进行二次处理
  • tableDataType 是导出的Excel文件的文件名
  • json_fields 是将要导出的表格表头,表头可以任意定制,如下:
<script>
  export default {
  data () {
    return {
      tableData :[],    // 存放用于导出excel的数据
      json_fields: {
        学号: "student_id",    //常规字段
        姓名: "student_name", //支持嵌套属性
        专业班级: "student_majorclass",
        成绩: "student_score",
        特长: "specialty",
        一轮笔试: "firstexam_score",
        一轮状态: "first_ispass",
        一轮面试:"interview_score",
        一面状态:"interview",
        二轮面试:"secondinterview_score",
        二面状态:"secondinterview"
      }
    }
  },
</script>

我这里的 json_fields 是动态配置的,因为有一个表格表头的筛选功能,所以每次导出的Excel文件的表头都可能不一样,动态配置如下:

// 动态配置导出Excel文件的表头
exportExcelHeader() {
   this.json_fields = {};
   this.tableFilterData.forEach(e => {
     this.json_fields[e.label] = e.prop;
   });
 },
  • tableFilterData 是经过筛选之后的表头,结构如下:
tableFilterData = [
  { label: '字段1', prop: 'rsName' },
  { label: '字段2', prop: 'rsCode' },
]

结果如下:
方案三结果
该方案相当好用

原文链接:https://blog.csdn.net/weixin_45745641/article/details/119971252

vue-json-excel的官方文档:https://www.npmjs.com/package/vue-json-excel

要将Vue项目中Element UI的Table组件导出Excel文件,可以按照以下步骤进行操作: 1. 首先,确保你的Vue项目中已经安装了Element UI和xlsx插件。如果还没有安装,可以使用以下命令进行安装: ``` npm install element-ui xlsx ``` 2. 在需要导出Table组件的Vue组件中,导入所需的模块和样式: ```javascript import XLSX from 'xlsx'; import 'xlsx/dist/xlsx.css'; import { Table } from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; ``` 3. 在模板中使用Element UI的Table组件,并绑定数据: ```html <template> <div> <el-table :data="tableData" ref="table"> <!-- 表格内容 --> </el-table> <el-button type="primary" @click="exportTable">导出表格</el-button> </div> </template> ``` 4.Vue组件的`exportTable`方法中,使用XLSX库将Table组件的数据导出Excel文件: ```javascript export default { data() { return { tableData: [ // 表格数据 ], }; }, methods: { exportTable() { const tableData = this.$refs.table.store.states.data; // 获取Table组件数据 const worksheet = XLSX.utils.json_to_sheet(tableData); // 将数据转换为worksheet对象 const workbook = XLSX.utils.book_new(); // 创建工作簿对象 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); // 将worksheet添加到工作簿 const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' }); // 将工作簿转换为二进制数据 function s2ab(s) { // 字符串转ArrayBuffer const buf = new ArrayBuffer(s.length); const view = new Uint8Array(buf); for (let i = 0; i < s.length; i++) { view[i] = s.charCodeAt(i) & 0xff; } return buf; } const blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' }); // 创建Blob对象 const downloadLink = document.createElement('a'); // 创建下载链接 downloadLink.href = URL.createObjectURL(blob); downloadLink.download = 'table.xlsx'; // 下载文件名 document.body.appendChild(downloadLink); // 添加下载链接到页面 downloadLink.click(); // 模拟点击下载 setTimeout(() => { document.body.removeChild(downloadLink); // 下载完成后移除下载链接 URL.revokeObjectURL(downloadLink.href); // 释放URL对象 }, 200); }, }, }; ``` 在这个示例中,`exportTable`方法使用`$refs`来获取Table组件的数据,并使用XLSX库将数据转换为Excel文件。然后,创建一个下载链接并模拟点击下载。最后,移除下载链接和释放URL对象。 请注意,上述示例中的`tableData`和`s2ab`函数需要根据你的实际情况进行调整。`tableData`应该是你要导出Table组件的数据,而`s2ab`函数是一个将字符串转换成ArrayBuffer的辅助函数。 使用以上步骤,你就可以将Element UI的Table组件导出Excel文件了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值