function exportSheetExcel(luckysheet, images, name = "file") { // 参数为luckysheet.getluckysheetfile()获取的对象 // 1.创建工作簿,可以为工作簿添加属性 let workbook = new ExcelJS.Workbook(); // 2.创建表格,第二个参数可以配置创建什么样的工作表 luckysheet.every(function(table) { if (table.data.length === 0) return true; let worksheet = workbook.addWorksheet(name); // 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值 setStyleAndValue(table.data, worksheet); setMerge(table.config.merge, worksheet); setBorder(table, worksheet); setImages(table, images, worksheet, workbook); return true; }) // 4.写入 buffer const buffer = workbook.xlsx.writeBuffer() // 5.保存为文件 buffer.then(function(buf) { saveFile(buf, name); uploadExcel(buf,'http://192.168.0.11:8084/api/uploadExcel') }) } function uploadExcel(buffer, url) { const formData = new FormData(); const randomId = GetQueryString('randomid') formData.append('file', new Blob([buffer], { type: 'application/octet-stream' })); formData.append("randomId", randomId); $.ajax({ url: url, type: 'POST', data: formData, processData: false, // 告诉jQuery不要处理发送的数据 contentType: false, // 告诉jQuery不要设置Content-Type请求头 success: function(response) { // 上传成功 console.log('上传成功'); }, error: function(xhr, status, error) { // 上传失败 console.error('上传失败'); } }) } function arrayBufferToBase64(array) { array = new Uint8Array(array); var length = array.byteLength; var table = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' ]; var base64Str = ''; for (var i = 0; length - i >= 3; i += 3) { var num1 = array[i]; var num2 = array[i + 1]; var num3 = array[i + 2]; base64Str += table[num1 >>> 2] + table[((num1 & 0b11) << 4) | (num2 >>> 4)] + table[((num2 & 0b1111) << 2) | (num3 >>> 6)] + table[num3 & 0b111111]; } var lastByte = length - i; if (lastByte === 1) { var lastNum1 = array[i]; base64Str += table[lastNum1 >>> 2] + table[((lastNum1 & 0b11) << 4)] + '=='; } else if (lastByte === 2) { var lastNum1 = array[i]; var lastNum2 = array[i + 1]; base64Str += table[lastNum1 >>> 2] + table[((lastNum1 & 0b11) << 4) | (lastNum2 >>> 4)] + table[(lastNum2 & 0b1111) << 2] + '='; } return base64Str; } 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; return Math.abs((num - 0) / (arr[maxIndex] - arr[minIndex])) + index; } 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)) + index return radio; } var setImages = function(table, images, worksheet, workbook) { let { visibledatacolumn, //所有行的位置 visibledatarow //所有列的位置 } = { ...table } // if (typeof images != 'object') return; for (let key in images) { // 通过 base64 将图像添加到工作簿 let myBase64Image = images[key].src; //开始行 开始列 结束行 结束列 const item = images[key]; const imageId = workbook.addImage({ base64: myBase64Image, extension: 'png' }); //console.log(myBase64Image) 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 = Number(getImagePosition(w_ed, visibledatacolumn).toFixed(0)); const row_ed = Number(getImagePosition(h_ed, visibledatarow).toFixed(0)); let result = `${cellPos(col_st,row_st)}:${cellPos(col_ed,row_ed)}` // worksheet.addImage(imageId, 'B7:G20'); worksheet.addImage(imageId, result); } }; //单元格数字转字母 function cellPos(c, r, n) { let ordA = 'A'.charCodeAt(0); let ordZ = 'Z'.charCodeAt(0); let len = ordZ - ordA + 1; let s = ""; while (c >= 0) { s = String.fromCharCode(c % len + ordA) + s; c = Math.floor(c / len) - 1; } if (n) { return s + (r + 1) + ":" + s + (r + n); } else { return s + (r + 1); } } 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); //设置单元格列宽除以8 dobCol.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 color = fc ? '' : (fc + "").indexOf('rgb') > -1 ? util.rgb2hex(fc) : fc; let font = { name: ff, family: 1, size: fs, color: { argb: color.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; }