Vue實現Excel預覽功能使用場景示例詳解
使用場景
項目中經常能遇到要求預覽excel文件的需求,下面分享一下常用的方法以及可能遇到的問題。
通過解析excel功能,實現PDF導入時的預覽

首先我們用到了XLSX(sheetJs)這個庫來處理Excel類型的文件
地址:
https://www.npmjs.com/package/xlsx
支持大部分的現代瀏覽器版本

具體使用
下載: 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],
// 配置單元的數據轉換方法,dateNF不生效
{ raw: true, cellDates: true, dateNF: "yyyy/mm/dd" }
);
//若當前sheet沒有數據,則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文件內的數據類型為時間,會被轉成Date格式。

官方文檔中允許配置dateNF來進行時間格式化,但是實際使用起來并沒有效果。
所以針對時間格式的處理,筆者這里直接轉為Date格式,在后續(xù)過程中進行了手動處理。

我們初始化load方法后,將excel文件源文件,轉為bolb格式,在塞給fileReader.readAsBinaryString,進行文件處理方法的執(zhí)行。
const blob = new Blob([file.raw]);
fileReader.readAsBinaryString(blob);最后輪詢sheetArray來進行數據的二次處理,最后得到前端可以使用的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");
},代碼總結
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" }
);
//若當前sheet沒有數據,則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實現Excel預覽功能使用場景示例詳解的詳細內容,更多關于Vue Excel預覽功能的資料請關注腳本之家其它相關文章!

