使用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)錯(cuò)處理
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)文章
vue項(xiàng)目中常用解決跨域的方法總結(jié)(CORS和Proxy)
在vue項(xiàng)目中,一般我們會遇到跨域的問題,vue項(xiàng)目中解決跨域是非常簡單的,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中常用解決跨域的方法,主要解釋CROS和Proxy兩種方式,需要的朋友可以參考下2022-12-12關(guān)于vue.js彈窗組件的知識點(diǎn)總結(jié)
最近在開發(fā)過程對對于組件化的開發(fā)有一些感想,于是開始記錄下這些。彈窗組件一直是 web 開發(fā)中必備的,使用頻率相當(dāng)高,最常見的莫過于 alert,confirm和prompt這些,不同的組件庫對于彈窗的處理也是不一樣的,下面來一起看看吧。2016-09-09vue使用動態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式
這篇文章主要介紹了vue使用動態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Vue中的element tabs點(diǎn)擊錨點(diǎn)定位,鼠標(biāo)滾動定位
這篇文章主要介紹了Vue中的element tabs點(diǎn)擊錨點(diǎn)定位,鼠標(biāo)滾動定位方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07vue中props賦值給data出現(xiàn)的問題及解決
這篇文章主要介紹了vue中props賦值給data出現(xiàn)的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10基于vue2.0的活動倒計(jì)時(shí)組件countdown(附源碼下載)
這是一款基于vue2.0的活動倒計(jì)時(shí)組件,可以使用服務(wù)端時(shí)間作為當(dāng)前時(shí)間,在倒計(jì)時(shí)開始和結(jié)束時(shí)可以自定義回調(diào)函數(shù)。這篇文章主要介紹了基于vue2.0的活動倒計(jì)時(shí)組件countdown,需要的朋友可以參考下2018-10-10