一.技术

exceljs;luckysheet;

参考文档:使用exceljs导出luckysheet表格_csdn_lsy的博客-CSDN博客_luckysheet 导出;

https://github.com/exceljs/exceljs/blob/HEAD/README_zh.md;

二.实现

参考网上博文exceljs对导出lucksheet表格的实现,发现存在一些问题:

1.从excel复制粘贴的表格会出现颜色适配的问题.

2.部分代码参数对应不上,适配不了最新版本的luckysheet.

3.新增对图片的支持.

3.部分单元格边框无法绘制;

4.填充背景色为空时,会导致边框消失;

5.合并单元格导出错乱;

6.其他的一些BUG

进行了修复,其中参考了部分luckysheet源码;

三.注意事项

1.由于luckysheet在网页端和excel分辨率无法保持完全一致,所以导出到excel中的时候,可能存在单元格大小与原表格不一致的情况,需要在setStyleAndValue中对单元格大小进行手动调整,具体可查看代码注释。后续也会逐渐进行自动适配。

2.导出图片时,由于浏览器和excel分辨率无法保持完全一致,图片在excel位置和网页端可能不同,因此提供两种方式。一是图片大小保持不变,但是右侧的位置可能会改变;二是图片位置不变,但是图片分辨率可能有差异。具体可查看setImages方法。

如果觉得对你有帮助的话,请点赞收藏一下,有任何问题也可以留言,会及时更新与维护。

1. 安装exceljs

npm install exceljs

2.代码

const Excel = require('exceljs')
export  async function exportSheetExcel(luckysheet,name="file") { // 参数为luckysheet.getluckysheetfile()获取的对象// 1.创建工作簿,可以为工作簿添加属性const workbook = new Excel.Workbook();// 2.创建表格,第二个参数可以配置创建什么样的工作表luckysheet.every(function (table) {if (table.data.length === 0) return true;const worksheet = workbook.addWorksheet(name);// 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值setStyleAndValue(table.data, worksheet);setMerge(table.config.merge, worksheet);setBorder(table, worksheet);setImages(table, worksheet, workbook);return true;})// 4.写入 bufferconst buffer = await workbook.xlsx.writeBuffer();// 5.保存为文件saveFile(buffer,name);
}var saveFile = function(buf,name) {let blob = new Blob([buf], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' });const downloadElement = document.createElement('a');let href = window.URL.createObjectURL(blob);downloadElement.href = href;downloadElement.download = name+".xlsx"; // 文件名字document.body.appendChild(downloadElement);downloadElement.click();document.body.removeChild(downloadElement); // 下载完成移除元素window.URL.revokeObjectURL(href); // 释放掉blob对象
}var setMerge = function (luckyMerge = {}, worksheet) {const mergearr = Object.values(luckyMerge);mergearr.forEach(function (elem) { // elem格式:{r: 0, c: 0, rs: 1, cs: 2}// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)worksheet.mergeCells(elem.r + 1, elem.c + 1, elem.r + elem.rs, elem.c + elem.cs);});
}//获取图片在单元格的位置
var  getImagePosition =function(num,arr){let index = 0;let minIndex;let maxIndex;for (let i = 0; i < arr.length; i++) {if (num < arr[i]) {index = i;break;}}if(index==0){minIndex = 0;maxIndex = 1;}else if(index == arr.length-1){minIndex = arr.length-2;maxIndex = arr.length-1;}else{minIndex = index-1;maxIndex = index;}let min = arr[minIndex];let max = arr[maxIndex];let radio = Math.abs((num-min)/(max-min))+indexreturn radio;
}var setImages = function (table, worksheet, workbook) {let {images,visibledatacolumn,//所有行的位置visibledatarow //所有列的位置} = {...table}if (typeof images != 'object') return;for (let key in images) {// 通过 base64  将图像添加到工作簿const myBase64Image = images[key].src;//开始行 开始列 结束行 结束列const item = images[key];const imageId = workbook.addImage({base64: myBase64Image,extension: 'png'});const col_st = getImagePosition(item.default.left,visibledatacolumn);const row_st = getImagePosition(item.default.top,visibledatarow);//模式1,图片左侧与luckysheet位置一样,像素比例保持不变,但是,右侧位置可能与原图所在单元格不一致worksheet.addImage(imageId, {tl: { col: col_st, row: row_st},ext: { width: item.default.width, height: item.default.height },});//模式2,图片四个角位置没有变动,但是图片像素比例可能和原图不一样// const w_ed = item.default.left+item.default.width;// const h_ed = item.default.top+item.default.height;// const col_ed = getImagePosition(w_ed,visibledatacolumn);// const row_ed = getImagePosition(h_ed,visibledatarow);// worksheet.addImage(imageId, {//   tl: { col: col_st, row: row_st},//   br: { col: col_ed, row: row_ed},// });}
};var setBorder = function (lucksheetfile, worksheet) {if (!lucksheetfile) return;const luckyToExcel = {style: {0: 'none',1: 'thin',2: 'hair',3: 'dotted',4: 'dashDot', // 'Dashed',5: 'dashDot',6: 'dashDotDot',7: 'double',8: 'medium',9: 'mediumDashed',10: 'mediumDashDot',11: 'mediumDashDotDot',12: 'slantDashDot',13: 'thick'}}//获取所有的单元格边框的信息const borderInfoCompute = getBorderInfo(lucksheetfile);for (let x in borderInfoCompute) {let border = {};let info = borderInfoCompute[x];let row = parseInt(x.substr(0, x.indexOf('_')));let column = parseInt(x.substr(x.indexOf('_') + 1));if(info.t!=undefined){const tcolor = info.t.color.indexOf('rgb')>-1 ?rgb2hex(info.t.color):info.t.color;border['top'] = {style:luckyToExcel.style[info.t.style],color: {argb: tcolor.replace('#', '')}};}if(info.r!=undefined){const rcolor = info.r.color.indexOf('rgb')>-1 ?rgb2hex(info.r.color):info.r.color;border['right'] = {style:luckyToExcel.style[info.r.style],color: {argb: rcolor.replace('#', '')}};}if(info.b!=undefined){const bcolor = info.b.color.indexOf('rgb')>-1 ?rgb2hex(info.b.color):info.b.color;border['bottom'] = {style:luckyToExcel.style[info.b.style],color: {argb: bcolor.replace('#', '')}};}if(info.l!=undefined){const lcolor = info.l.color.indexOf('rgb')>-1 ?rgb2hex(info.l.color):info.l.color;border['left'] = {style:luckyToExcel.style[info.l.style],color: {argb: lcolor.replace('#', '')}};}worksheet.getCell(row + 1, column + 1).border = border;}
}var getBorderInfo=function(luckysheetfile){let borderInfoCompute = {};let cfg = luckysheetfile.config;let data = luckysheetfile.data;let borderInfo = cfg["borderInfo"];//设置需要计算边框的区域let dataset_row_st = 0,dataset_row_ed = data.length,dataset_col_st=0,dataset_col_ed=data[0].length;if(borderInfo != null && borderInfo.length > 0){for(let i = 0; i < borderInfo.length; i++){let rangeType = borderInfo[i].rangeType;if(rangeType == "range"){let borderType = borderInfo[i].borderType;let borderColor = borderInfo[i].color;let borderStyle = borderInfo[i].style;let borderRange = borderInfo[i].range;for(let j = 0; j < borderRange.length; j++){let bd_r1 = borderRange[j].row[0], bd_r2 = borderRange[j].row[1];let bd_c1 = borderRange[j].column[0], bd_c2 = borderRange[j].column[1];if(bd_r1<dataset_row_st){bd_r1 = dataset_row_st;}if(bd_r2>dataset_row_ed){bd_r2 = dataset_row_ed;}if(bd_c1<dataset_col_st){bd_c1 = dataset_col_st;}if(bd_c2>dataset_col_ed){bd_c2 = dataset_col_ed;}if(borderType == "border-left"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}if(borderInfoCompute[bd_r + "_" + bd_c1] == null){borderInfoCompute[bd_r + "_" + bd_c1] = {};}borderInfoCompute[bd_r + "_" + bd_c1].l = { "color": borderColor, "style": borderStyle };let bd_c_left = bd_c1 - 1;if(bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null){let cell_left = data[bd_r][bd_c_left];let mc = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];if(mc.c + mc.cs - 1 == bd_c_left){borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": borderColor, "style": borderStyle };}}let mc = cfg["merge"] || {};for (const key in mc) {let {c,r,cs,rs} = mc[key];if(bd_c1 <= c + cs - 1 && bd_c1 > c && bd_r >= r && bd_r <= r + rs -1){borderInfoCompute[bd_r + "_" + bd_c1].l = null;}}}}else if(borderType == "border-right"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}if(borderInfoCompute[bd_r + "_" + bd_c2] == null){borderInfoCompute[bd_r + "_" + bd_c2] = {};}borderInfoCompute[bd_r + "_" + bd_c2].r = { "color": borderColor, "style": borderStyle };let bd_c_right = bd_c2 + 1;if(bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null){let cell_right = data[bd_r][bd_c_right];let mc = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];if(mc.c == bd_c_right){borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": borderColor, "style": borderStyle };}}let mc = cfg["merge"] || {};for (const key in mc) {let {c,r,cs,rs} = mc[key];if(bd_c2 < c + cs - 1 && bd_c2 >= c && bd_r >= r && bd_r <= r + rs -1){borderInfoCompute[bd_r + "_" + bd_c2].r = null;}}}}else if(borderType == "border-top"){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r1] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(borderInfoCompute[bd_r1 + "_" + bd_c] == null){borderInfoCompute[bd_r1 + "_" + bd_c] = {};}borderInfoCompute[bd_r1 + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };let bd_r_top = bd_r1 - 1;if(bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]){if(data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null){let cell_top = data[bd_r_top][bd_c];let mc = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];if(mc.r + mc.rs - 1 == bd_r_top){borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}let mc = cfg["merge"] || {};for (const key in mc) {let {c,r,cs,rs} = mc[key];if(bd_r1 <= r + rs - 1 && bd_r1 > r && bd_c >= c && bd_c <= c + cs -1){borderInfoCompute[bd_r1 + "_" + bd_c].t = null;}}}}else if(borderType == "border-bottom"){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r2] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(borderInfoCompute[bd_r2 + "_" + bd_c] == null){borderInfoCompute[bd_r2 + "_" + bd_c] = {};}borderInfoCompute[bd_r2 + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };let bd_r_bottom = bd_r2 + 1;if(bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]){if(data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null){let cell_bottom = data[bd_r_bottom][bd_c];let mc = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];if(mc.r == bd_r_bottom){borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}let mc = cfg["merge"] || {};for (const key in mc) {let {c,r,cs,rs} = mc[key];if(bd_r2 < r + rs - 1 && bd_r2 >= r && bd_c >= c && bd_c <= c + cs -1){borderInfoCompute[bd_r2 + "_" + bd_c].b = null;}}}}else if(borderType == "border-all"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];if(mc==undefined || mc==null){continue};if(mc.r == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}if(mc.r + mc.rs - 1 == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}if(mc.c == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };}if(mc.c + mc.cs - 1 == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}if(bd_r == bd_r1){let bd_r_top = bd_r1 - 1;if(bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]){if(data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null){let cell_top = data[bd_r_top][bd_c];let mc = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];if(mc.r + mc.rs - 1 == bd_r_top){borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}}if(bd_r == bd_r2){let bd_r_bottom = bd_r2 + 1;if(bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]){if(data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null){let cell_bottom = data[bd_r_bottom][bd_c];let mc = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];if(mc.r == bd_r_bottom){borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}}if(bd_c == bd_c1){let bd_c_left = bd_c1 - 1;if(bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null){let cell_left = data[bd_r][bd_c_left];let mc = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];if(mc.c + mc.cs - 1 == bd_c_left){borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": borderColor, "style": borderStyle };}}}if(bd_c == bd_c2){let bd_c_right = bd_c2 + 1;if(bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null){let cell_right = data[bd_r][bd_c_right];let mc = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];if(mc.c == bd_c_right){borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": borderColor, "style": borderStyle };}}}}}}else if(borderType == "border-outside"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(!(bd_r == bd_r1 || bd_r == bd_r2 || bd_c == bd_c1 || bd_c == bd_c2)){continue;}if(bd_r == bd_r1){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };let bd_r_top = bd_r1 - 1;if(bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]){if(data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null){let cell_top = data[bd_r_top][bd_c];let mc = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];if(mc.r + mc.rs - 1 == bd_r_top){borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}}if(bd_r == bd_r2){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };let bd_r_bottom = bd_r2 + 1;if(bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]){if(data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null){let cell_bottom = data[bd_r_bottom][bd_c];let mc = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];if(mc.r == bd_r_bottom){borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}}if(bd_c == bd_c1){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };let bd_c_left = bd_c1 - 1;if(bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null){let cell_left = data[bd_r][bd_c_left];let mc = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];if(mc.c + mc.cs - 1 == bd_c_left){borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": borderColor, "style": borderStyle };}}}if(bd_c == bd_c2){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };let bd_c_right = bd_c2 + 1;if(bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null){let cell_right = data[bd_r][bd_c_right];let mc = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];if(mc.c == bd_c_right){borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": borderColor, "style": borderStyle };}}else{borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": borderColor, "style": borderStyle };}}}}}}else if(borderType == "border-inside"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(bd_r == bd_r1 && bd_c == bd_c1){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else if(bd_r == bd_r2 && bd_c == bd_c1){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}else if(bd_r == bd_r1 && bd_c == bd_c2){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else if(bd_r == bd_r2 && bd_c == bd_c2){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}else if(bd_r == bd_r1){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];if(mc.c == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };}else if(mc.c + mc.cs - 1 == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else if(bd_r == bd_r2){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];if(mc.c == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };}else if(mc.c + mc.cs - 1 == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}else if(bd_c == bd_c1){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];if(mc.r == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}else if(mc.r + mc.rs - 1 == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else if(bd_c == bd_c2){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];if(mc.r == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}else if(mc.r + mc.rs - 1 == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else{if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];if(mc.r == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}else if(mc.r + mc.rs - 1 == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}if(mc.c == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };}else if(mc.c + mc.cs - 1 == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}}}}else if(borderType == "border-horizontal"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(bd_r == bd_r1){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else if(bd_r == bd_r2){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}}else{if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];if(mc.r == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };}else if(mc.r + mc.rs - 1 == bd_r){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].t = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].b = { "color": borderColor, "style": borderStyle };}}}}}else if(borderType == "border-vertical"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(bd_c == bd_c1){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };}}else if(bd_c == bd_c2){if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };}}else{if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c] || {};if(mc.c == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };}else if(mc.c + mc.cs - 1 == bd_c){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };}}else{if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}borderInfoCompute[bd_r + "_" + bd_c].l = { "color": borderColor, "style": borderStyle };borderInfoCompute[bd_r + "_" + bd_c].r = { "color": borderColor, "style": borderStyle };}}}}}else if(borderType == "border-none"){for(let bd_r = bd_r1; bd_r <= bd_r2; bd_r++){if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}for(let bd_c = bd_c1; bd_c <= bd_c2; bd_c++){if(borderInfoCompute[bd_r + "_" + bd_c] != null){delete borderInfoCompute[bd_r + "_" + bd_c];}if(bd_r == bd_r1){let bd_r_top = bd_r1 - 1;if(bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]){delete borderInfoCompute[bd_r_top + "_" + bd_c].b;}}if(bd_r == bd_r2){let bd_r_bottom = bd_r2 + 1;if(bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]){delete borderInfoCompute[bd_r_bottom + "_" + bd_c].t;}}if(bd_c == bd_c1){let bd_c_left = bd_c1 - 1;if(bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]){delete borderInfoCompute[bd_r + "_" + bd_c_left].r;}}if(bd_c == bd_c2){let bd_c_right = bd_c2 + 1;if(bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]){delete borderInfoCompute[bd_r + "_" + bd_c_right].l;}}}}}}}else if(rangeType == "cell"){let value = borderInfo[i].value;let bd_r = value.row_index, bd_c = value.col_index;if(bd_r < dataset_row_st || bd_r > dataset_row_ed || bd_c < dataset_col_st || bd_c > dataset_col_ed){continue;}if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {continue;}if(value.l != null || value.r != null || value.t != null || value.b != null){if(borderInfoCompute[bd_r + "_" + bd_c] == null){borderInfoCompute[bd_r + "_" + bd_c] = {};}if(data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null){let cell = data[bd_r][bd_c];let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c] || {};if(value.l != null && bd_c == mc.c){ //左边框borderInfoCompute[bd_r + "_" + bd_c].l = { "color": value.l.color, "style": value.l.style };let bd_c_left = bd_c - 1;if(bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null){let cell_left = data[bd_r][bd_c_left];let mc_l = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];if(mc_l.c + mc_l.cs - 1 == bd_c_left){borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": value.l.color, "style": value.l.style };}}else{borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": value.l.color, "style": value.l.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].l = null;}if(value.r != null && bd_c == mc.c + mc.cs - 1){ //右边框borderInfoCompute[bd_r + "_" + bd_c].r = { "color": value.r.color, "style": value.r.style };let bd_c_right = bd_c + 1;if(bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null){let cell_right = data[bd_r][bd_c_right];let mc_r = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];if(mc_r.c == bd_c_right){borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": value.r.color, "style": value.r.style };}}else{borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": value.r.color, "style": value.r.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].r = null;}if(value.t != null && bd_r == mc.r){ //上边框borderInfoCompute[bd_r + "_" + bd_c].t = { "color": value.t.color, "style": value.t.style };let bd_r_top = bd_r - 1;if(bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]){if(data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null){let cell_top = data[bd_r_top][bd_c];let mc_t = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];if(mc_t.r + mc_t.rs - 1 == bd_r_top){borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": value.t.color, "style": value.t.style };}}else{borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": value.t.color, "style": value.t.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].t = null;}if(value.b != null && bd_r == mc.r + mc.rs - 1){ //下边框borderInfoCompute[bd_r + "_" + bd_c].b = { "color": value.b.color, "style": value.b.style };let bd_r_bottom = bd_r + 1;if(bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]){if(data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null){let cell_bottom = data[bd_r_bottom][bd_c];let mc_b = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];if(mc_b.r == bd_r_bottom){borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": value.b.color, "style": value.b.style };}}else{borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": value.b.color, "style": value.b.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].b = null;}}else{if(value.l != null){ //左边框borderInfoCompute[bd_r + "_" + bd_c].l = { "color": value.l.color, "style": value.l.style };let bd_c_left = bd_c - 1;if(bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null){let cell_left = data[bd_r][bd_c_left];let mc_l = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];if(mc_l.c + mc_l.cs - 1 == bd_c_left){borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": value.l.color, "style": value.l.style };}}else{borderInfoCompute[bd_r + "_" + bd_c_left].r = { "color": value.l.color, "style": value.l.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].l = null;}if(value.r != null){ //右边框borderInfoCompute[bd_r + "_" + bd_c].r = { "color": value.r.color, "style": value.r.style };let bd_c_right = bd_c + 1;if(bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]){if(data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null){let cell_right = data[bd_r][bd_c_right];let mc_r = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];if(mc_r.c == bd_c_right){borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": value.r.color, "style": value.r.style };}}else{borderInfoCompute[bd_r + "_" + bd_c_right].l = { "color": value.r.color, "style": value.r.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].r = null;}if(value.t != null){ //上边框borderInfoCompute[bd_r + "_" + bd_c].t = { "color": value.t.color, "style": value.t.style };let bd_r_top = bd_r - 1;if(bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]){if(data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null){let cell_top = data[bd_r_top][bd_c];let mc_t = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];if(mc_t.r + mc_t.rs - 1 == bd_r_top){borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": value.t.color, "style": value.t.style };}}else{borderInfoCompute[bd_r_top + "_" + bd_c].b = { "color": value.t.color, "style": value.t.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].t = null;}if(value.b != null){ //下边框borderInfoCompute[bd_r + "_" + bd_c].b = { "color": value.b.color, "style": value.b.style };let bd_r_bottom = bd_r + 1;if(bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]){if(data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null){let cell_bottom = data[bd_r_bottom][bd_c];let mc_b = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];if(mc_b.r == bd_r_bottom){borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": value.b.color, "style": value.b.style };}}else{borderInfoCompute[bd_r_bottom + "_" + bd_c].t = { "color": value.b.color, "style": value.b.style };}}}else{borderInfoCompute[bd_r + "_" + bd_c].b = null;}}}else{delete borderInfoCompute[bd_r + "_" + bd_c];}}}}return borderInfoCompute;
}//获取数据类型
var getObjType = function (obj) {let toString = Object.prototype.toString;let map = {'[object Boolean]': 'boolean','[object Number]': 'number','[object String]': 'string','[object Function]': 'function','[object Array]': 'array','[object Date]': 'date','[object RegExp]': 'regExp','[object Undefined]': 'undefined','[object Null]': 'null','[object Object]': 'object'}return map[toString.call(obj)];
}var setStyleAndValue = function (cellArr, worksheet) {if (!Array.isArray(cellArr)) return;cellArr.forEach(function (row, rowid) {const dbrow = worksheet.getRow(rowid+1);//设置单元格行高,默认乘以1.2倍dbrow.height=luckysheet.getRowHeight([rowid])[rowid]*1.2;row.every(function (cell, columnid) {if (!cell) return true;if(rowid==0){const dobCol = worksheet.getColumn(columnid+1);//设置单元格列宽除以8dobCol.width=luckysheet.getColumnWidth([columnid])[columnid]/8;}let fill = fillConvert(cell.bg);let font = fontConvert(cell.ff, cell.fc, cell.bl, cell.it, cell.fs, cell.cl, cell.ul);let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb, cell.tr);let value;var v='';if(cell.ct&&cell.ct.t=='inlineStr'){var s=cell.ct.s;s.forEach(function(val,num){v+=val.v;})}else{v=cell.v;}if (cell.f) {value = { formula: cell.f, result: v };} else {value = v;}let target = worksheet.getCell(rowid + 1, columnid + 1);target.fill = fill;target.font = font;target.alignment = alignment;target.value = value;return true;})})
}//转换颜色
var rgb2hex =function(rgb) {if (rgb.charAt(0) == '#'){return rgb;}var ds = rgb.split(/\D+/);var decimal = Number(ds[1]) * 65536 + Number(ds[2]) * 256 + Number(ds[3]);return "#" + zero_fill_hex(decimal, 6);function zero_fill_hex(num, digits) {var s = num.toString(16);while (s.length < digits)s = "0" + s;return s;}
}var fillConvert = function (bg) {if (!bg) {return null;// return {//  type: 'pattern',//    pattern: 'solid',//   fgColor:{argb:'#ffffff'.replace('#','')}// }}bg  = bg.indexOf('rgb')>-1 ?rgb2hex(bg):bg;let fill = {type: 'pattern',pattern: 'solid',fgColor: {argb: bg.replace('#', '')}}return fill
}var fontConvert = function (ff = 0, fc = '#000000', bl = 0, it = 0, fs = 10, cl = 0, ul = 0) { // luckysheet:ff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线)const luckyToExcel = {0: '微软雅黑',1: '宋体(Song)',2: '黑体(ST Heiti)',3: '楷体(ST Kaiti)',4: '仿宋(ST FangSong)',5: '新宋体(ST Song)',6: '华文新魏',7: '华文行楷',8: '华文隶书',9: 'Arial',10: 'Times New Roman ',11: 'Tahoma ',12: 'Verdana',num2bl: function (num) {return num === 0 ? false : true}}let font = {name:ff,family: 1,size: fs,color: {argb: fc.replace('#', '')},bold: luckyToExcel.num2bl(bl),italic: luckyToExcel.num2bl(it),underline: luckyToExcel.num2bl(ul),strike: luckyToExcel.num2bl(cl)}return font;
}var alignmentConvert = function (vt = 'default', ht = 'default', tb = 'default', tr = 'default') { // luckysheet:vt(垂直), ht(水平), tb(换行), tr(旋转)const luckyToExcel = {vertical: {0: 'middle',1: 'top',2: 'bottom',default: 'top'},horizontal: {0: 'center',1: 'left',2: 'right',default: 'left'},wrapText: {0: false,1: false,2: true,default: false},textRotation: {0: 0,1: 45,2: -45,3: 'vertical',4: 90,5: -90,default: 0}}let alignment = {vertical: luckyToExcel.vertical[vt],horizontal: luckyToExcel.horizontal[ht],wrapText: luckyToExcel.wrapText[tb],textRotation: luckyToExcel.textRotation[tr]}return alignment;}

luckysheet导出excel表格(使用exceljs,支持图片)相关推荐

  1. vue使用js-table2excel将数据导出Excel表格,含文字、图片类型, 设置表格样式/添加合并单元格

    最近项目遇到了一个需求,在后台将学生信息以Excel表格导出,学生信息包含姓名.联系电话.照片等信息,一般情况下信息导出只需要导出字符串类型,但是现在的导出内容包含了图片,于是百度看到了js-tabl ...

  2. 『解疑』前端通过json数据导出excel表格文件(支持多级表头、复杂表头)(json转excel)

    问题 如何友好的通过规范的json数据导出成excel文件. 解题 制定规范的json数据结构: ( 只要将现有的数据处理成以下格式即可导出 ) {headerList: [ // 多级表头(2选1即 ...

  3. koa2 导出excel表格设置样式_一调整Excel表格的行列宽度,图片又得重新调整?点这个设置就行...

    不知道大家有没有遇到过这样的情况?就是当我们在调整表格的行列宽度的时候,表格里面的图片就会发生变化,像下图这样. 然后我们就需要把图片一个个调整成跟表格行列宽度一致,这样简直太麻烦了有木有! 一.图片 ...

  4. 天易26----java导出excel表格(支持wps和office excel)

    一:页面图片显示预览: 1) 2)点击导出按钮后预览: 3)最终生成的excel表格图片预览: 二:代码演示: 说明:执行操作时,请先引进导出excel表格的jar文件包,在本人的资源里面可以下载,网 ...

  5. java 导入导出excel表格

    java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...

  6. elementui中有导出组件吗_Element-ui组件库Table表格导出Excel表格

    安装 npm install --save xlsx file-saver 两个插件的详细地址在下面 https://github.com/SheetJS/js-xlsx https://github ...

  7. bootstraptable导出excel独立使用_使用 EasyPOI 优雅导出Excel模板数据(含图片)

    EasyPOI功能如同名字Easy,主打的功能就是容易,让一个没接触过POI的人员可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出.通过简单的注解和模板语言(熟悉的表 ...

  8. java poi导出Excel表格超大数据量解决方案

    Java实现导出excel表格功能,大部分都会使用apache poi,apache poi API 地址 POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果 ...

  9. 使用EasyPOI导出Excel模板数据(含图片)

    使用EasyPOI导出Excel模板数据(含图片) EasyPOI功能如同名字Easy,主打的功能就是容易,让一个没接触过POI的人员可以方便的写出Excel导出,Excel模板导出,Excel导入, ...

最新文章

  1. “Linux频道”有链接打不开
  2. oracle 主键自增函数_oracle 实现主键自增
  3. ubuntu ip设置
  4. java多次点击时事件_click事件的累加绑定,绑定一次点击事件,执行多次
  5. 二叉树---树的深度递归理解
  6. 烂泥:高负载均衡学习haproxy之安装与配置
  7. 如何在Hadoop中控制MapReduce任务的数量
  8. sqlplus 小记
  9. 如何在win7下如何创建虚拟磁盘
  10. 计算机怎么用函数算出成绩自评,SPSSAU一众新功能上线:高级公式、综合得分一键计算!...
  11. 二手房数据的分析与挖掘(三)-- 描述性分析2D
  12. Docker端口映射只有Ipv6端口导致Ipv4访问不通
  13. 赛前练习(百度之星资格赛及初赛真题+Codeforces(div2级别))
  14. oneway的定义和使用
  15. 网络编程(python语言)
  16. 1D Barcode图片组件,支持线性和邮政符号
  17. MySQL在Linux上的四种安装方式
  18. 《穷爸爸和富爸爸》读后感
  19. 任正非:5G 背后有个不谈恋爱的小伙子
  20. 好用的自定义Okhttp日志拦截器

热门文章

  1. 刷脸支付新技术的蔓延能出乎我们的意料
  2. STM32HAL库驱动DHT11和BH1750
  3. 上传本地项目到github远程仓库
  4. win10怎么放计算机在桌面,win10怎么把此电脑放到桌面_w10如何把此电脑添加到桌面...
  5. m在ISE平台下使用verilog开发基于FPGA的GMSK调制器
  6. 【NLP相关】一些实用的NLP开源项目
  7. windows Outlook邮箱无法连接服务器
  8. 《致盛夏的七封情书》 ------------ 第一篇《晨曦》
  9. 洛阳等地启动电子劳动合同试点,多家名企选择法大大
  10. Vue学习杂记(八)——SPA模式和前端路由