使用vue導(dǎo)出excel遇到的坑及解決
vue導(dǎo)出excel遇到的坑
需求
Vue+element UI el-table下的導(dǎo)出當(dāng)前所有數(shù)據(jù)到一個(gè)excel文件里。
先按照網(wǎng)上的方法,看看有哪些坑
準(zhǔn)備工作
1、安裝依賴:yarn add xlsx file-saver -S
2、在放置需要導(dǎo)出功能的組件中引入
import FileSaver from "file-saver"; import XLSX from "xlsx";
3、HTML中的設(shè)置,簡單來說就是給需要導(dǎo)出的table標(biāo)簽el-table上加一個(gè)id:如outTable,對應(yīng)下面的exportExcel方法中的 document.querySelector(‘#outTable‘)
   //導(dǎo)出當(dāng)前表格
exportCurrent:function(){
? ? var wb = XLSX.utils.table_to_book(document.querySelector('#outTable')) //表格id
? ? var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
? ? try {
? ? ? ? FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), 'sheet.xlsx') ?//文件名
? ? } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) }
? ? return wbout
},我們來看一下原始數(shù)據(jù)

接下來再來看一下導(dǎo)出的結(jié)果

哎???我訂單編號跟銀行卡號咋成了科學(xué)計(jì)數(shù)法了??
還有我的時(shí)間,時(shí)分秒呢??
原因是因?yàn)閿?shù)字太長了,需要使用excel的文本格式才能顯示正常
經(jīng)過各種搜索,最終解決方法如下:
exportExcel() {
? ? ? var xlsxParam = { raw: true };//轉(zhuǎn)換成excel時(shí),使用原始的格式
? ? ? var wb = XLSX.utils.table_to_book(document.querySelector("#outTable"),xlsxParam);
? ? ? var wbout = XLSX.write(wb, {
? ? ? ? bookType: "xlsx",
? ? ? ? bookSST: true,
? ? ? ? type: "array"
? ? ? });
? ? ? try {
? ? ? ? FileSaver.saveAs(
? ? ? ? ? new Blob([wbout], { type: "application/octet-stream;charset=utf-8" }),
? ? ? ? ? "sheetjs.xlsx"
? ? ? ? );
? ? ? } catch (e) {
? ? ? ? if (typeof console !== "undefined") console.log(e, wbout);
? ? ? }
? ? ? return wbout;
? ? },再來看我們的數(shù)據(jù)

大功告成。
vue導(dǎo)出excel表報(bào)錯處理
Excel表導(dǎo)出功能需要將請求中的 responseType 設(shè)置為 blob,也就是說請求只能接收Excel文件,json數(shù)據(jù)沒法處理
此時(shí)可以根據(jù) Response 的 Content-Type值類判斷處理,如果值 為 application/json,則先將返回的數(shù)據(jù)轉(zhuǎn)換成字符串,然后再轉(zhuǎn)換為 JSON
// 導(dǎo)出
downLoad(){
const fileReader = new FileReader() // 第一步創(chuàng)建文件對象
const loading = this.$loading({
lock: true,
text: '導(dǎo)出加載中···',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const data = {
equipmentName: this.searchForm.equipmentName,
equipmentCode: this.searchForm.equipmentCode,
};
download('/api/mfg-mes/equipmentVersion/exportStandardWorkTime', data).then(res => {
fileReader.onloadend = () => { // 定義方法
if (res.type === 'application/json') { // 第三步進(jìn)行判斷
const jsonData = JSON.parse(fileReader.result) // 說明是普通對象數(shù)據(jù),后臺轉(zhuǎn)換失敗
// 后臺信息
// console.log(jsonData,'fileReader')
this.$message.error(jsonData.msg)
loading.close();
}else{
downloadFile(res, '信息表', 'xlsx')
loading.close();
}
}
fileReader.readAsText(res)
}).catch(err => {
console.log(err);
})
},以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue實(shí)現(xiàn)導(dǎo)出excel表格功能
- vue中導(dǎo)出Excel表格的實(shí)現(xiàn)代碼
- Vue結(jié)合后臺導(dǎo)入導(dǎo)出Excel問題詳解
- 詳解如何在Vue項(xiàng)目中導(dǎo)出Excel
- Vue前端導(dǎo)出Excel文件的詳細(xì)實(shí)現(xiàn)方案
- Vue 前端導(dǎo)出后端返回的excel文件方式
- vue導(dǎo)出excel表格的新手詳細(xì)教程
- vue實(shí)現(xiàn)導(dǎo)出excel的多種方式總結(jié)
- Vue純前端如何實(shí)現(xiàn)導(dǎo)出簡單Excel表格的功能
相關(guān)文章
Vue3 defineExpose要在方法聲明定義以后使用的教程
這篇文章主要介紹了Vue3 defineExpose要在方法聲明定義以后使用的教程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
Vue過濾器filters的用法及時(shí)間戳轉(zhuǎn)換問題
Vue的filters過濾器是比較常見的一個(gè)知識點(diǎn),下面我將結(jié)合時(shí)間戳轉(zhuǎn)換的例子帶你快速了解filters的用法,感興趣的朋友一起看看吧2021-09-09

