Vue3如何利用xlsx、xlsx-js-style導(dǎo)出Excel表格使用(適合新手)
適用于新手,僅包括:列寬設(shè)置、單元格合并、單元格樣式設(shè)置
1、基本代碼
這是最基礎(chǔ)的代碼,沒有樣式。其中的data數(shù)據(jù)格式例如如下:
[
[列1,列2,列3,列4],
[1,2,3,4],
[5,6,7,8]
]
import * as XLSX from 'xlsx'; function s2ab(s: string) { const buf = new ArrayBuffer(s.length); const view = new Uint8Array(buf); for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } export default function exportExcel(data: any, fileName: string) { // 創(chuàng)建一個(gè)空的Workbook對象 const wb = XLSX.utils.book_new(); // 創(chuàng)建一個(gè)新的Worksheet const ws = XLSX.utils.aoa_to_sheet(data); // 將Worksheet添加到Workbook中 XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); // 生成Excel文件的Binary字符串 const excelBinaryString = XLSX.write(wb, {type: 'binary'}); // 將Binary字符串轉(zhuǎn)換為Blob對象 const blob = new Blob([s2ab(excelBinaryString)], {type: 'application/octet-stream'}); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = fileName; link.click(); URL.revokeObjectURL(link.href); }
2、設(shè)置列寬
這里要注意一個(gè):wpx這個(gè)屬性配置之后。如果網(wǎng)頁上的列寬是200,那么導(dǎo)出之后會發(fā)現(xiàn)在Excel中的列寬變成237.xxx左右。若要保持網(wǎng)頁寬度和導(dǎo)出后寬度一直。需要乘上0.843621。
wpx = 網(wǎng)頁列寬 * 0.843621
// 創(chuàng)建一個(gè)新的Worksheet const ws = XLSX.utils.aoa_to_sheet(data); // 設(shè)置列寬。有幾列就設(shè)置幾個(gè) wx["!cols"] = [ { wpx: 180 } ];
3、設(shè)置合并單元格
這里需要注意:單元格合并之后,合并后的顯示內(nèi)容將根據(jù)s里對應(yīng)的單元格數(shù)據(jù)為主
// 創(chuàng)建一個(gè)新的Worksheet const ws = XLSX.utils.aoa_to_sheet(data); ws["!merges"] = [ { s: { // 合并單元格開始單元格行列信息 r: 0, // 行號 c: 0 // 列號 }, e: { // 合并單元格結(jié)束單元格行列信息 r: 0, // 行號 c: 1 // 列號 } } ]; // 上面的意思是從第1行第1列到第1行第2列的單元格。 // 需要合并幾個(gè),就寫多少個(gè){s:{r:0,c:0},e:{r:0,c:0}}
4、單元格樣式
這里需要使用xlsx-js-style包?;敬a如下。
具體樣式設(shè)置查看文檔:GitHub - gitbrent/xlsx-js-style: SheetJS Community Edition + Basic Cell Styles
// import * as XLSX from 'xlsx'; import XLSX from 'xlsx-js-style'; function s2ab(s: string) { const buf = new ArrayBuffer(s.length); const view = new Uint8Array(buf); for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } export default function exportExcel(data: any, colsWidthArr: any, mergesArr: any, fileName: string) { // 創(chuàng)建一個(gè)空的Workbook對象 const wb = XLSX.utils.book_new(); // 創(chuàng)建一個(gè)新的Worksheet const ws = XLSX.utils.aoa_to_sheet(data); if(colsWidthArr !== null){ ws["!cols"] = colsWidthArr } if(mergesArr !== null){ ws["!merges"] = mergesArr; } const ColName = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; // 列索引名 for(let col = 0;col<data[0].length;col++){ // 根據(jù)表頭,獲取列號 for(let row = 0; row<data.length;row++){ // 根據(jù)內(nèi)容,獲取行號 let i = row +1; // 行號初始從1開始 ws[ColName[col]+i]['s'] = { // 這里解析成ws['A1'].s = {};根據(jù)每個(gè)單元格索引進(jìn)行設(shè)置 alignment: { vertical: 'center', horizontal: 'left' }, border: { top: { style: 'thin', color: '#000000' }, bottom: { style: 'thin', color: '#000000' }, left: { style: 'thin', color: '#000000' }, right: { style: 'thin', color: '#000000' } } } } } // 將Worksheet添加到Workbook中 XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); // 生成Excel文件的Binary字符串 const excelBinaryString = XLSX.write(wb, {type: 'binary'}); // 將Binary字符串轉(zhuǎn)換為Blob對象 const blob = new Blob([s2ab(excelBinaryString)], {type: 'application/octet-stream'}); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = fileName; link.click(); URL.revokeObjectURL(link.href); }
效果如下:
更新:
1、設(shè)置單元格樣式的時(shí)候,需要對單元格進(jìn)行判斷,防止因?yàn)閮?nèi)容為空時(shí)導(dǎo)致報(bào)錯(cuò)。
... if(ws[ColName[col]+i] === undefined){ // 防止內(nèi)容為null時(shí)報(bào)錯(cuò) continue } ws[ColName[col]+i]['s'] = { ...
總結(jié)
到此這篇關(guān)于Vue3如何利用xlsx、xlsx-js-style導(dǎo)出Excel表格使用的文章就介紹到這了,更多相關(guān)Vue3導(dǎo)出Excel表格使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue使用luckyexcel實(shí)現(xiàn)在線表格及導(dǎo)出導(dǎo)入方式
- 前端實(shí)現(xiàn)Excel文件導(dǎo)出功能的完整代碼解析(vue實(shí)現(xiàn)excel文件導(dǎo)出)
- vue2項(xiàng)目使用exceljs多表頭導(dǎo)出功能詳解
- Vue用Export2Excel導(dǎo)出excel,多級表頭數(shù)據(jù)方式
- vue使用Luckysheet插件實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出
- vue使用xlsx庫和xlsx-style庫導(dǎo)入導(dǎo)出excel、設(shè)置單元格背景色、文字居中、合并單元格、設(shè)置列寬
- 在Vue中使用xlsx組件實(shí)現(xiàn)Excel導(dǎo)出功能的步驟詳解
- 在Vue中實(shí)現(xiàn)Excel導(dǎo)出功能(數(shù)據(jù)導(dǎo)出)
相關(guān)文章
Vue父組件向子組件傳值以及data和props的區(qū)別詳解
這篇文章主要介紹了Vue父組件向子組件傳值以及data和props的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03vue子組件封裝彈框只能執(zhí)行一次的mounted問題及解決
這篇文章主要介紹了vue子組件封裝彈框只能執(zhí)行一次的mounted問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Vue實(shí)現(xiàn)動態(tài)創(chuàng)建和刪除數(shù)據(jù)的方法
下面小編就為大家分享一篇Vue實(shí)現(xiàn)動態(tài)創(chuàng)建和刪除數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03Vue實(shí)現(xiàn)預(yù)覽文件(Word/Excel/PDF)功能的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何通過Vue實(shí)現(xiàn)預(yù)覽文件(Word/Excel/PDF)的功能,文中的實(shí)現(xiàn)步驟講解詳細(xì),需要的小伙伴可以參考一下2023-03-03element-ui 表格數(shù)據(jù)時(shí)間格式化的方法
這篇文章主要介紹了element-ui 表格數(shù)據(jù)時(shí)間格式化的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08Vue3+El-Plus實(shí)現(xiàn)表格行拖拽功能完整代碼
在vue3+elementPlus網(wǎng)站開發(fā)中,詳細(xì)完成el-table表格的鼠標(biāo)拖拽/拖曳/拖動排序,下面這篇文章主要給大家介紹了關(guān)于Vue3+El-Plus實(shí)現(xiàn)表格行拖拽功能的相關(guān)資料,需要的朋友可以參考下2024-05-05