Vue3問題:如何將el-table導出為Excel表格?五個注意點要知道!
大家好,我是大澈!
今天分享一個開發中比較常見的問題,如何導出表格。
可以這么說,只要頁面上有表格出現的地方,你就要做好實現導出功能的打算,因為你永遠不知道客戶要拿表格去做什么。
一、需求分析
1、需求
點擊紅色導出按鈕,將下方表格的內容,導出為Excel文檔。
2、問題
- xlsx庫和file-saver庫各自的作用
- 使用時的注意點
- XLSX.utils.table_to_book和XLSX.write的作用
二、需求實現速覽
1、安裝依賴
npm install --save xlsx
npm install --save file-saver
2、編寫導出Excel的公共方法
在公共方法文件utils.js中,放入如下代碼。
其中,exportExcel方法接受兩個參數,name是生成excel的文件名,tableName是表格的id。
// 導入依賴
import FileSaver from 'file-saver';
import XLSX from 'xlsx';
/**
* 導出Excel表格
* @param name 生成excel的文件名,如:interestTable.xlsx
* @param tableName 表格的id,如:#tableId
* */
export const exportExcel = (name, tableName) => {
let sel = XLSX.utils.table_to_book(document.querySelector(tableName))
let selIn = XLSX.write(sel, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([selIn], { type: 'application/octet-stream' }), name)
} catch (e) {
if (typeof console !== 'undefined') console.log(e, selIn)
}
return selIn
}
3、導入使用公共方法
<!-- 導出按鈕 -->
<el-button @click="exportExcel('interestTable.xlsx', '#tableId')">導出</el-button>
<!-- 表格 -->
<el-table id="tableId" :data="tableData" border style="width: 100%"></el-table>
// 導入指定公共方法
import { exportExcel } from "@/common/utils";
三、問題答案詳解
1、xlsx庫和file-saver庫各自的作用
(1)xlsx庫
xlsx是一個流行的JavaScript庫,用于在瀏覽器中讀取、解析和生成Excel文件。它支持多種Excel文件格式,包括XLSX、XLS、CSV和ODS。你可以使用xlsx庫來創建、修改和操作工作簿、工作表、單元格等Excel文件中的元素。
(2)file-saver庫
file-saver是一個用于在瀏覽器中保存文件的JavaScript庫。它提供了一個簡單的API,可以將數據保存為文件,并將其下載到用戶的本地計算機。file-saver庫通過創建一個Blob對象并觸發瀏覽器的文件下載功能來實現文件保存。
2、使用時的注意點
(1)瀏覽器兼容性
xlsx、file-saver庫依賴瀏覽器的Blob和FileSaver功能。大多數現代瀏覽器都支持這些功能,但是在某些舊版本或特定的移動瀏覽器中可能不被支持。在使用前,請確保目標瀏覽器支持Blob和FileSaver。
(2)數據格式
確保將數據正確轉換為適合xlsx庫的格式。xlsx庫支持多種數據源,如JSON、數組和HTML表格。根據你的數據源,使用適當的方法將其轉換為工作表的格式。
(3)文件格式和選項
xlsx庫支持多種Excel文件格式,如XLSX、XLS、CSV和ODS。在使用XLSX.write函數時,可以設置不同的選項來指定生成的文件類型、樣式、圖表等。查閱xlsx庫的文檔以了解更多選項和配置信息。
(4)大數據量處理
如果你要處理大量數據,尤其是在較舊或性能較低的設備上,可能會遇到性能問題。在這種情況下,你可以考慮使用流式處理或分頁加載數據,以避免內存消耗過大。
(5)錯誤處理
在使用xlsx、file-saver庫時,要注意正確處理可能出現的錯誤。例如,如果數據轉換失敗、保存文件失敗或瀏覽器不支持所需功能,需要捕獲和處理這些錯誤,并提供適當的反饋給用戶。
3、XLSX.utils.table_to_book和XLSX.write的作用
(1)XLSX.utils.table_to_book
XLSX.utils.table_to_book是xlsx庫中的一個函數,它的作用是將HTML表格轉換為Workbook對象。
在Excel文件中,Workbook是最高級別的對象,它包含了多個工作表(Worksheets)以及其他Excel文件的元數據。table_to_book函數的作用是將一個指定的HTML表格轉換為Workbook對象,以便進一步操作和處理。
具體來說,table_to_book函數將HTML表格的內容和結構解析為Workbook對象的結構。它會將表格的每一行轉換為工作表(Worksheet)中的行,將表格的每一列轉換為工作表中的列,并將單元格的內容、樣式等信息保存在對應的位置上。
(2)XLSX.write
XLSX.write是xlsx庫中的一個函數,它的作用是將Workbook對象轉換為Excel文件的二進制數據或文件流。
在Excel文件處理中,Workbook是最高級別的對象,它包含了多個工作表(Worksheets)以及其他Excel文件的元數據。XLSX.write函數的作用是將給定的Workbook對象轉換為Excel文件的二進制數據,以便保存到本地或進行其他處理。
具體來說,XLSX.write函數接受兩個參數:
- workbook:要轉換為Excel文件的Workbook對象,它包含了要保存的數據、工作表結構、樣式和其他元數據。
- options:一個可選的配置對象,用于指定轉換的選項,如文件類型(例如XLSX、CSV)、文件的輸出格式(例如ArrayBuffer、BinaryString、Blob等)以及其他設置。默認選項為{ type: 'array', bookType: 'xlsx' },表示將Workbook對象轉換為XLSX格式的二進制數據數組。