通過js-xlsx純前端導(dǎo)出excel

修改excel的樣式,可以在轉(zhuǎn)換數(shù)據(jù)之后進(jìn)行修改

如:? ? 需要導(dǎo)入xlsx? ?以及? xlsx-style依賴? 以及 兩個文件? Blob.js 和 Export2Excel.js

導(dǎo)入這兩個js之后,修改下面的函數(shù)就可以進(jìn)行自定義的樣式修改了。

export? function? ?exportJsonToExceln (column, list, defaultTitle ,ranges, headnums) {

????????????/* 表頭 */

????????????const tHeader = []

????????????const filterVal = []

????????????/* 獲取列寬 */

????????????const wpx = [];

????????????const tTitle = [];

????????????let tTitleName ='';

????????????if (defaultTitle.indexOf('-')? != -1 &&? defaultTitle.indexOf('-') == 5) {

????????????????tTitleName = defaultTitle.substring(defaultTitle.indexOf('-')+1)

????????????}else {

????????????????tTitleName = defaultTitle

????????????}

????????????tTitle.push(tTitleName);

????????????for (var i =0;i < column.length; ++i) {

? ? ? ? ? ? ? ? tHeader.push(column[i].title);

????????????????filterVal.push(column[i].key);

????????????????var widthToWpx={wpx:''};

????????????????if(undefined===column[i].width){

????????????????????/* 如果沒有設(shè)置長度默認(rèn) */

? ? ? ? ? ? ? ? ? ? widthToWpx.wpx=column[i].title.length*15+10

? ????????????????}else{

????????????????????widthToWpx.wpx=column[i].width*1.5

????????????????? }

????????????????wpx.push(widthToWpx)

????????????}

????????????/* 轉(zhuǎn)換數(shù)據(jù)格式 */

????????????const data =formatJson(filterVal, list)

????????????data.unshift(tHeader);

????????????/* 分析報表頭部信息 */

????????????if (otherInfo[0] !=1) {

????????????????for (var i =1;i < otherInfo[0];i++) {

????????????????????data.unshift(otherInfo[i+1])

????????????????}

????????????}

????????????// 將導(dǎo)出內(nèi)容標(biāo)題放在數(shù)組的頭部

????????????data.unshift(tTitle);

????????????//? 針對從后臺返回數(shù)據(jù)為null,由于null在導(dǎo)出的excel中是未定義的,所以不能設(shè)置樣式,在這里去空

????????????for (let i=otherInfo[0] +1;i < data.length - 2; i++) {

????????????????let dataj =data[i]

????????????????for (let j=0;j < dataj.length; j++ ){

????????????????????if (dataj[j] ===null ||dataj[j] ===undefined) {

????????????????????????dataj[j] =''

? ? ????????????????}else if (!isNaN(dataj[j])) {

????????????????????????dataj[j] =dataj[j].toString()

????????????????????}

????????????????}

????????????}

????????????/* 創(chuàng)建workbook對象,并且轉(zhuǎn)換數(shù)據(jù) */

????????????var wb =new Workbook(),ws =sheet_from_array_of_arrays(data);

????????????/* 設(shè)置單元格寬,單位為px */

? ? ? ? ? ? ws['!cols']=wpx;

????????????// 編輯excel格式,需要在此處添加對應(yīng)的規(guī)則

????????????ws['!merges'] = otherInfo[1];

????????????let rawnums = column.length;

????????????let colnums = list.length - otherInfo[0];

????????????if (otherInfo[0] ==1) {

????????????????colnums =colnums -1

????????????}

????????????ws['A1'].s = {

????????????????font: {sz:20,bold:true,},

????????????????alignment: {

????????????????????horizontal:"center",vertical:"center",wrap_text:true

? ????????????????}

????????????};

????????????// ws[num2] 是導(dǎo)出excel格式話的重點,也就是excel中各單元格的坐標(biāo)

????????????for(var i =1 ;i <=rawnums ;i++) {

????????????????let num =i +64;

????????????????let num2 =String.fromCharCode(num) + (otherInfo[0] +1);

????????????????if (ws[num2] !=undefined) {

????????????????????ws[num2].s = {

????????????????????????font: {sz:10,bold:true,},

????????????????????????alignment: {

????????????????????????????horizontal:"center",vertical:"center",wrap_text:true

? ? ????????????????????? },

? ? ? ? ? ? ? ? ? ? ? ? ?border:{

????????????????????????????top:{style:'thin'},left:{style:'thin'},bottom:{style:'thin'},right:{style:'thin'}

????????????????????????}

????????????????????};

????????????????}

????????????}

????????????for(var i =1 ;i <=rawnums ;i++) {

????????????????let num =i +64;

????????????????for (var j =1;j <=colnums;j++) {

????????????????????let num2 =String.fromCharCode(num) + (j + otherInfo[0] +1);

????????????????????if (ws[num2] !=undefined) {

????????????????????????if (isNaN(ws[num2].v)) {

????????????????????????????ws[num2].s = {

????????????????????????????????font: {sz:10,bold:false,},

????????????????????????????????alignment: {horizontal:"left",vertical:"center",wrap_text:true},

????????????????????????????????border: {top: {style:'thin'},left: {style:'thin'},bottom: {style:'thin'},right: {style:'thin'}}

????????????????????????????};

????????????????????????}else {

????????????????????????????ws[num2].s = {

????????????????????????????????font: {sz:10,bold:false,},

????????????????????????????????alignment: {horizontal:"right",vertical:"center",wrap_text:true},

????????????????????????????????border: {top: {style:'thin'},left: {style:'thin'},bottom: {style:'thin'},right: {style:'thin'}}

????????????????????????????};

????????????????????????}

????????????????????}

????????????????}

????????????}

????????????var ws_name ="Sheet1";

????????????wb.SheetNames.push(ws_name);

????????????wb.Sheets[ws_name] =ws;

????????????var title = defaultTitle ||'列表';

????????????var wbout =XLSX.write(wb, {bookType:'xlsx',bookSST:false,type:'binary'});

????????????/* 創(chuàng)建二進(jìn)制對象寫入轉(zhuǎn)換好的字節(jié)流*/

????????????saveAs(new Blob([s2ab(wbout)], {type:"application/octet-stream"}),title +".xlsx");

????????}

下面是導(dǎo)出excel的樣式,更多樣式,讀者可以自己嘗試。。

謝謝?。。。?/p>


導(dǎo)出樣式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容