Vue將el-table導(dǎo)出為excel文件的實(shí)現(xiàn)方法
1. 安裝依賴
首先,安裝 xlsx 庫(kù):
npm install xlsx file-saver --save
xlsx:用于解析和生成 Excel 文件。file-saver:用于保存導(dǎo)出的 Excel 文件。
2. 代碼實(shí)現(xiàn)
完整示例
vue
復(fù)制編輯
<template>
<div>
<el-button type="primary" @click="exportExcel">導(dǎo)出 Excel</el-button>
<el-table :data="tableData" border style="width: 100%">
<el-table-column prop="id" label="ID" width="80"></el-table-column>
<el-table-column prop="name" label="姓名" width="120"></el-table-column>
<el-table-column prop="age" label="年齡" width="80"></el-table-column>
<el-table-column prop="city" label="城市" width="150"></el-table-column>
</el-table>
</div>
</template>
<script>
import * as XLSX from "xlsx";
import { saveAs } from "file-saver";
export default {
data() {
return {
tableData: [
{ id: 1, name: "張三", age: 25, city: "北京" },
{ id: 2, name: "李四", age: 30, city: "上海" },
{ id: 3, name: "王五", age: 28, city: "廣州" },
],
};
},
methods: {
exportExcel() {
// 1. 提取表格數(shù)據(jù)
const data = this.tableData.map((row) => ({
ID: row.id,
姓名: row.name,
年齡: row.age,
城市: row.city,
}));
// 2. 創(chuàng)建工作表
const worksheet = XLSX.utils.json_to_sheet(data);
// 3. 創(chuàng)建工作簿
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "表格數(shù)據(jù)");
// 4. 生成 Excel 并下載
const excelBuffer = XLSX.write(workbook, {
bookType: "xlsx",
type: "array",
});
const blob = new Blob([excelBuffer], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
});
saveAs(blob, "表格數(shù)據(jù).xlsx");
},
},
};
</script>3. 代碼解析
exportExcel 方法
格式化數(shù)據(jù)
- 先將
el-table的tableData數(shù)據(jù)格式化成適合 Excel 的 JSON 結(jié)構(gòu)。 json_to_sheet方法用于將 JSON 轉(zhuǎn)換為 Excel 可識(shí)別的表格。
- 先將
創(chuàng)建工作表 & 工作簿
XLSX.utils.json_to_sheet(data)創(chuàng)建 Excel 工作表。XLSX.utils.book_new()創(chuàng)建新的 Excel 文件(工作簿)。XLSX.utils.book_append_sheet(workbook, worksheet, "表格數(shù)據(jù)")將表格數(shù)據(jù)添加到工作簿。
生成 Excel 并觸發(fā)下載
XLSX.write(workbook, { bookType: "xlsx", type: "array" })生成 Excel 文件的二進(jìn)制數(shù)據(jù)。new Blob([...], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" })生成 Excel 文件 Blob。saveAs(blob, "表格數(shù)據(jù).xlsx")觸發(fā)瀏覽器下載。
4. 額外優(yōu)化
1. 自定義表頭
可以用 el-table-column 的 label 作為 Excel 表頭,而不是手動(dòng)寫(xiě):
exportExcel() {
const headers = this.$refs.table.columns.map(col => col.label); // 獲取表頭
const keys = this.$refs.table.columns.map(col => col.property); // 獲取字段
const data = this.tableData.map(row => {
let obj = {};
keys.forEach((key, index) => {
obj[headers[index]] = row[key];
});
return obj;
});
const worksheet = XLSX.utils.json_to_sheet(data);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "數(shù)據(jù)");
const excelBuffer = XLSX.write(workbook, { bookType: "xlsx", type: "array" });
const blob = new Blob([excelBuffer], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
});
saveAs(blob, "表格數(shù)據(jù).xlsx");
}然后在 el-table 中添加 ref="table"。
2. 處理合并單元格
可以使用 XLSX.utils.sheet_add_aoa 進(jìn)行合并:
XLSX.utils.sheet_add_aoa(worksheet, [["ID", "姓名", "年齡", "城市"]], { origin: "A1" });這樣可以在 A1 手動(dòng)插入表頭。
3. 設(shè)置列寬
worksheet["!cols"] = [
{ wch: 10 }, // ID列寬
{ wch: 20 }, // 姓名列寬
{ wch: 10 }, // 年齡列寬
{ wch: 15 }, // 城市列寬
];5. 結(jié)論
- 適用于 Vue 2.0 + Element UI 的 el-table
- 可以導(dǎo)出 Excel,支持中文表頭
- 支持自定義表頭、列寬、格式優(yōu)化
- 減少人工操作,提高開(kāi)發(fā)效率
如果你需要更復(fù)雜的 Excel 處理,比如 合并單元格、設(shè)置樣式、多個(gè) Sheet 導(dǎo)出,可以繼續(xù)優(yōu)化!
到此這篇關(guān)于Vue將el-table導(dǎo)出為excel文件的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Vue el-table導(dǎo)出為excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3+elementPlus中 樹(shù)形控件封裝的實(shí)現(xiàn)
本文主要介紹了Vue3+elementPlus中 樹(shù)形控件封裝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
vue基于input實(shí)現(xiàn)密碼的顯示與隱藏功能
這篇文章主要介紹了vue基于input實(shí)現(xiàn)密碼的顯示與隱藏功能,文末給大家介紹了vue?如何實(shí)現(xiàn)切換密碼的顯示與隱藏效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
如何解決el-checkbox選中狀態(tài)更改問(wèn)題
這篇文章主要介紹了如何解決el-checkbox選中狀態(tài)更改問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
基于vue3+antDesign2+echarts?實(shí)現(xiàn)雷達(dá)圖效果
這篇文章主要介紹了基于vue3+antDesign2+echarts?實(shí)現(xiàn)雷達(dá)圖,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
Vue實(shí)例創(chuàng)建和掛載的詳細(xì)過(guò)程
在 Vue.js 中,實(shí)例的掛載是一個(gè)非常重要的過(guò)程,它決定了 Vue 實(shí)例如何與 DOM 進(jìn)行交互,通過(guò)分析 Vue 源碼,特別是 Vue 的構(gòu)建函數(shù)和生命周期,我們可以了解掛載過(guò)程的詳細(xì)步驟,需要的朋友可以參考下2024-11-11
如何修改element-ui中tree組件的icon圖標(biāo)(小白都會(huì)的前端技能)
這篇文章主要給大家介紹了關(guān)于如何修改element-ui中tree組件的icon圖標(biāo)的相關(guān)資料,本文介紹的是小白都會(huì)的前端技能,文中通過(guò)代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01

