luckysheet-demo: luckysheet-demoexcel导入导出实例

使用组件

1. luckysheet在线excel

2. luckyexcel excel导入插件

3. exceljs 导出excel数据

导出exceljs的二次封装,可直接使用如下

function exportSheetExcel(luckysheet,name) { // 参数为luckysheet.getluckysheetfile()获取的对象// 1.创建工作簿,可以为工作簿添加属性const workbook = new ExcelJS.Workbook();// 2.创建表格,第二个参数可以配置创建什么样的工作表// 2.创建表格,第二个参数可以配置创建什么样的工作表/*if (Object.prototype.toString.call(luckysheet) === '[object Object]') {luckysheet = [luckysheet]}*/var tableArr=luckysheet.getAllSheets();tableArr.forEach(function(table) {if (table.data.length === 0) return  true// ws.getCell('B2').fill = fills.const worksheet = workbook.addWorksheet(table.name)setStyleAndValue(table.data, worksheet);setMerge(table.config.merge, worksheet);setBorder(table, worksheet);setImages(table, worksheet, workbook);return true})// return// 4.写入 bufferconst buffer = workbook.xlsx.writeBuffer().then(data => {// console.log('data', data)const blob = new Blob([data], {type: 'application/vnd.ms-excel;charset=utf-8'})console.log("导出成功!")saveFile(blob, 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导入导出相关推荐

  1. 注解+反射优雅的实现Excel导入导出(通用版)

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/youzi1394046585/ article/details/86670203 日常在做后 ...

  2. java超级简单到爆的Excel导入导出(easypoi)

    场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...

  3. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  4. easyexcel 设置标题_EasyExcel,让 excel 导入导出更加简单

    做积极的人,而不是积极废人! 来源:jianshu.com/p/8f3defdc76d4EasyExcelGitHub上的官方说明快速开始maven仓库地址导入导出总结 EasyExcel 在做exc ...

  5. excel winform 导入 导出_强大的 Excel 导入导出工具 hutool

    " 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...

  6. easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出

    为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...

  7. SpringBoot集成EasyPoi实现Excel导入导出

    作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...

  8. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!

    在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...

  9. 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    最近闲了,花点几天时间将项目中常用的一些类.方法做了一下总结,希望对大家有用. 实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回fa ...

最新文章

  1. 「最小细胞」的3D数字模型,计算揭示生命最基本的要求
  2. 史上最全MySQL 大表优化方案(长文)
  3. 168输出为861java_AcWing 861. 二分图的最大匹配-java-关键处注释
  4. Kernel Crash kdump 使用指南
  5. Spring MVC的转发与重定向
  6. 2021年最新的Java面试题,精选100题,大厂必备
  7. vcredist_x86.exe 静默安装方法
  8. web前端入门到实战:纯CSS实现数据上报和HTML验证
  9. 苹果iPad air技巧教程:50个实用小技巧
  10. 俄罗斯决定退出国际空间站项目 马斯克:“一路顺风”
  11. tensorflow如何使用tensorboard将图片文件events.out.tfevents.1618410161.DESKTOP-CLCBFNS展示出来
  12. Unity-黑暗之魂复刻-翻滚、后跳功能
  13. 珊瑚海-一站式动态化布局框架
  14. 甲醇合成技术的研究进展
  15. 国内三大常见核心期刊体系简介——CSSCI、CSCD与中文核心期【转】刊
  16. 彻底解决不要脸的360更改浏览器主页【转载】
  17. 如何给员工或者客户做产品培训?
  18. 想成为高级程序员MYSQL的那些知识你需要全懂
  19. php100分闯关,有趣!php使用adb自动刷王者农药金币 【冒险模式】
  20. Jmeter基本使用到精通(一)从安装第一个任务线程的创建及测试

热门文章

  1. Matlab做一个刚体运动仿真,模拟小车避障
  2. 中国人民大学与加拿大女王大学金融硕士宋会芝:只要开始就不晚
  3. 基于汇编语言的文本对比算法
  4. 解决目标检测中密集遮挡问题——Repulsion loss
  5. css:box-shadow实现单边,多边阴影
  6. OpenNLP使用小结
  7. 老树发新芽-前后端分离实践
  8. 豆芽的生长过程观察日记-2020年
  9. QtVirtualKeyboard 虚拟键盘美化
  10. Topic 8. 临床预测模型-Lasso回归