修改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>
