Vue將el-table導出為excel文件的實現方法
1. 安裝依賴
首先,安裝 xlsx
庫:
npm install xlsx file-saver --save
xlsx
:用于解析和生成 Excel 文件。file-saver
:用于保存導出的 Excel 文件。
2. 代碼實現
完整示例
vue 復制編輯 <template> <div> <el-button type="primary" @click="exportExcel">導出 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. 提取表格數據 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, "表格數據"); // 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, "表格數據.xlsx"); }, }, }; </script>
3. 代碼解析
exportExcel 方法
格式化數據
- 先將
el-table
的tableData
數據格式化成適合 Excel 的 JSON 結構。 json_to_sheet
方法用于將 JSON 轉換為 Excel 可識別的表格。
- 先將
創(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, "表格數據")
將表格數據添加到工作簿。
生成 Excel 并觸發(fā)下載
XLSX.write(workbook, { bookType: "xlsx", type: "array" })
生成 Excel 文件的二進制數據。new Blob([...], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" })
生成 Excel 文件 Blob。saveAs(blob, "表格數據.xlsx")
觸發(fā)瀏覽器下載。
4. 額外優(yōu)化
1. 自定義表頭
可以用 el-table-column
的 label
作為 Excel 表頭,而不是手動寫:
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, "數據"); const excelBuffer = XLSX.write(workbook, { bookType: "xlsx", type: "array" }); const blob = new Blob([excelBuffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", }); saveAs(blob, "表格數據.xlsx"); }
然后在 el-table
中添加 ref="table"
。
2. 處理合并單元格
可以使用 XLSX.utils.sheet_add_aoa
進行合并:
XLSX.utils.sheet_add_aoa(worksheet, [["ID", "姓名", "年齡", "城市"]], { origin: "A1" });
這樣可以在 A1
手動插入表頭。
3. 設置列寬
worksheet["!cols"] = [ { wch: 10 }, // ID列寬 { wch: 20 }, // 姓名列寬 { wch: 10 }, // 年齡列寬 { wch: 15 }, // 城市列寬 ];
5. 結論
- 適用于 Vue 2.0 + Element UI 的 el-table
- 可以導出 Excel,支持中文表頭
- 支持自定義表頭、列寬、格式優(yōu)化
- 減少人工操作,提高開發(fā)效率
如果你需要更復雜的 Excel 處理,比如 合并單元格、設置樣式、多個 Sheet 導出,可以繼續(xù)優(yōu)化!
到此這篇關于Vue將el-table導出為excel文件的實現方法的文章就介紹到這了,更多相關Vue el-table導出為excel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue自定義表單驗證(rule,value,callback)使用詳解
這篇文章主要介紹了Vue自定義表單驗證(rule,value,callback)使用詳解,今天我們講一講自定義驗證規(guī)則具體使用場景和它的三個參數意思和使用,需要的朋友可以參考下2023-07-07vue3如何將html元素變成canvas(海報生成),進行圖片保存/截圖
這篇文章主要介紹了vue3實現將html元素變成canvas(海報生成),進行圖片保存/截圖,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05