JS實(shí)現(xiàn)Excel導(dǎo)出功能以及導(dǎo)出亂碼問題解決詳解
實(shí)現(xiàn)效果

在導(dǎo)出表格數(shù)據(jù)的時(shí)候,通常分為兩種情況
- 頁面列表數(shù)據(jù)導(dǎo)出
- 接口返回?cái)?shù)據(jù)導(dǎo)出
這里主要介紹接口返回?cái)?shù)據(jù)導(dǎo)出,關(guān)于頁面的列表數(shù)據(jù)導(dǎo)出,請(qǐng)看另一篇:vue3+element表格數(shù)據(jù)導(dǎo)出
接口返回?cái)?shù)據(jù)導(dǎo)出,通常需要請(qǐng)求后端接口獲取數(shù)據(jù),接口返回的數(shù)據(jù)基本上是亂碼的,需要先處理亂碼的數(shù)據(jù),否則導(dǎo)出來的文件是損壞的,如下

看到這種返回信息,表格數(shù)據(jù)基本上是已經(jīng)拿到了,現(xiàn)在只需要做一下數(shù)據(jù)的處理即可導(dǎo)出表格。
解決方法步驟拆解
步驟一:解碼
在請(qǐng)求接口的位置添加 { responseType: 'blob' } 將信息轉(zhuǎn)碼,此處有兩種寫法:
寫法1:
// 導(dǎo)出
export function userTable(params) {
return request({
url: '/users/table',
method: 'get',
params,
responseType: 'blob' // 添加 blob 解決亂碼問題,或者 arraybuffer
})
}寫法2:
export const userTable = (params) => axios.get('/users/table',{params},{ responseType: 'blob' })
// 在請(qǐng)求的后面加一行 { responseType: 'blob' }
// 或者 { responseType: 'arraybuffer' }步驟二:請(qǐng)求數(shù)據(jù)
// 導(dǎo)出
const getTable = async () => {
// 請(qǐng)求導(dǎo)出接口 獲取到后端返回的數(shù)據(jù)
let list = await getTableInfo(PageInfo);
console.log(list)
};此處得到的返回結(jié)果已經(jīng)成功編譯,打印的結(jié)果如圖所示:

步驟三:導(dǎo)出表格
步驟一配置完后這里可以直接復(fù)制,替換一下請(qǐng)求的接口即可
// 導(dǎo)出完整語法
const getTable = async () => {
// 請(qǐng)求導(dǎo)出接口 獲取到后端返回的數(shù)據(jù)
let list = await getTableInfo(PageInfo);
// content = 導(dǎo)出返回的數(shù)據(jù)
let content = list;
let data = new Blob([content], {
type: "application/vnd.ms-excel;charset=utf-8"
});
let downloadUrl = window.URL.createObjectURL(data);
let anchor = document.createElement("a");
anchor.href = downloadUrl;
anchor.download = "表格名稱.xlsx"; // 表格名稱.文件類型
anchor.click();
window.URL.revokeObjectURL(list); // 消除請(qǐng)求接口返回的list數(shù)據(jù)
};
};到此這篇關(guān)于JS實(shí)現(xiàn)Excel導(dǎo)出功能以及導(dǎo)出亂碼問題解決詳解的文章就介紹到這了,更多相關(guān)JS Excel導(dǎo)出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序 確認(rèn)框的實(shí)現(xiàn)(附代碼)
這篇文章主要介紹了微信小程序 確認(rèn)框的實(shí)現(xiàn)(附代碼),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
js仿蘋果iwatch外觀的計(jì)時(shí)器代碼分享
這篇文章主要介紹了JS+CSS3實(shí)現(xiàn)的類似于蘋果iwatch計(jì)時(shí)器特效,很實(shí)用的代碼,推薦給大家,有需要的小伙伴可以參考下。2015-08-08
你有必要知道的10個(gè)JavaScript難點(diǎn)
10個(gè)JavaScript難點(diǎn),你可能還不知道,不著急,本文為大家一一列出,一一攻破,感興趣的小伙伴們可以參考一下2017-07-07
深入理解JavaScript系列(2) 揭秘命名函數(shù)表達(dá)式
網(wǎng)上還沒用發(fā)現(xiàn)有人對(duì)命名函數(shù)表達(dá)式進(jìn)去重復(fù)深入的討論,正因?yàn)槿绱?,網(wǎng)上出現(xiàn)了各種各樣的誤解,本文將從原理和實(shí)踐兩個(gè)方面來探討JavaScript關(guān)于命名函數(shù)表達(dá)式的優(yōu)缺點(diǎn)2012-01-01
淺談js停止事件冒泡 阻止瀏覽器的默認(rèn)行為(阻止超連接 #)
下面小編就為大家?guī)硪黄獪\談js停止事件冒泡 阻止瀏覽器的默認(rèn)行為(阻止超連接 #)。2017-02-02

