Vue實現(xiàn)Excel預(yù)覽功能使用場景示例詳解
使用場景
項目中經(jīng)常能遇到要求預(yù)覽excel文件的需求,下面分享一下常用的方法以及可能遇到的問題。
通過解析excel功能,實現(xiàn)PDF導(dǎo)入時的預(yù)覽
首先我們用到了XLSX(sheetJs)這個庫來處理Excel類型的文件
地址:
https://www.npmjs.com/package/xlsx
支持大部分的現(xiàn)代瀏覽器版本
具體使用
下載: npm i xlsx
首先我們獲取一Excel類型的文件。
這里我直接用了el-upload組件返回的文件
然后使用FileReader讀取文件,注冊初始化onload方法,并且在其onload方法中使用xlsx庫處理文件;
- 首先使用xlsx的read方法,配置處理的詳情。
const workbook = XLSX.read(data, { type: "binary", cellText: false, cellDates: true, });
- 再輪詢讀取文件
for (let sheet in workbook.Sheets) { //循環(huán)讀取每個文件 const header = XLSX.utils.sheet_to_json(workbook.Sheets[sheet], { header: 1, }); const sheetArray = XLSX.utils.sheet_to_json( workbook.Sheets[sheet], // 配置單元的數(shù)據(jù)轉(zhuǎn)換方法,dateNF不生效 { raw: true, cellDates: true, dateNF: "yyyy/mm/dd" } ); //若當(dāng)前sheet沒有數(shù)據(jù),則continue if (sheetArray.length == 0) { continue; } this.tableHeader = header[0]; this.handleNetX(sheetArray, header[0]); } } catch (e) { this.$message.warning("上傳失敗"); }
注意sheet_to_json方法中此時cellDates配置為true之后,如果excel文件內(nèi)的數(shù)據(jù)類型為時間,會被轉(zhuǎn)成Date格式。
官方文檔中允許配置dateNF來進行時間格式化,但是實際使用起來并沒有效果。
所以針對時間格式的處理,筆者這里直接轉(zhuǎn)為Date格式,在后續(xù)過程中進行了手動處理。
我們初始化load方法后,將excel文件源文件,轉(zhuǎn)為bolb格式,在塞給fileReader.readAsBinaryString,進行文件處理方法的執(zhí)行。
const blob = new Blob([file.raw]); fileReader.readAsBinaryString(blob);
最后輪詢sheetArray來進行數(shù)據(jù)的二次處理,最后得到前端可以使用的Array類型的文件,展示在頁面中或者展示在表單中。
時間格式處理
處理時間的方法寫的比較簡單,主要就是判斷了Date的object類型,來格式化日期類型
handleNetX(sheetArray, header) { const totalTable = []; for (let index in sheetArray) { let row = {}; header.map(index1 => { const tempKey = this.mapTableTitle[index1]; if (typeof sheetArray[index][index1] === "object") { row[tempKey] = this.handleExcelDate(sheetArray[index][index1]); } else { row[tempKey] = sheetArray[index][index1]; } }); totalTable.push(row); } this.tableData = totalTable; }, handleExcelDate(date) { if (!date) { return; } return formatDate(date.getTime(), "YYYY/MM/DD"); },
代碼總結(jié)
async handleChangePre(file) { this.file = file; this.showResult = false; const fileReader = new FileReader(); fileReader.onload = ev => { try { const data = ev.target.result; const workbook = XLSX.read(data, { type: "binary", cellText: false, cellDates: true, }); for (let sheet in workbook.Sheets) { //循環(huán)讀取每個文件 const header = XLSX.utils.sheet_to_json(workbook.Sheets[sheet], { header: 1, }); const sheetArray = XLSX.utils.sheet_to_json( workbook.Sheets[sheet], { raw: true, cellDates: true, dateNF: "yyyy/mm/dd" } ); //若當(dāng)前sheet沒有數(shù)據(jù),則continue if (sheetArray.length == 0) { continue; } this.tableHeader = header[0]; console.log(sheetArray, "sheetArray"); this.handleNetX(sheetArray, header[0]); } } catch (e) { this.$message.warning("上傳失敗"); } }; const blob = new Blob([file.raw]); fileReader.readAsBinaryString(blob); },
以上就是Vue實現(xiàn)Excel預(yù)覽功能使用場景示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue Excel預(yù)覽功能的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue-router中query和params的區(qū)別解析
vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構(gòu)建單頁面應(yīng)用,這篇文章主要介紹了vue-router中query和params的區(qū)別 ,需要的朋友可以參考下2022-10-10vue+iview如何實現(xiàn)拼音、首字母、漢字模糊搜索
這篇文章主要介紹了vue+iview如何實現(xiàn)拼音、首字母、漢字模糊搜索,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04el-select二次封裝實現(xiàn)可分頁加載數(shù)據(jù)的示例代碼
使用el-select時一次性渲染幾百條數(shù)據(jù)時會造成頁面克頓, 可以通過分頁來實現(xiàn),所以本文給大家介紹了el-select二次封裝實現(xiàn)可分頁加載數(shù)據(jù),文中有詳細(xì)的代碼講解,具有一定的參考價值,需要的朋友可以參考下2023-12-12Vue結(jié)合Element-Plus封裝遞歸組件實現(xiàn)目錄示例
本文主要介紹了Vue結(jié)合Element-Plus封裝遞歸組件實現(xiàn)目錄示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04vue中@click和@click.native.prevent的區(qū)別
這篇文章主要介紹了vue中@click和@click.native.prevent的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04