ws 1 年間 前
コミット
c9a69e3017

+ 25 - 1
chuanyi_client2/src/utils/luckysheettool.js

@@ -1,4 +1,5 @@
 import {showAlertWin} from "@/utils/cqcy";
+import html2canvas from "html2canvas";
 
 function setCellSize(l, e, t, o) {
     const {
@@ -72,6 +73,18 @@ export function insertLuckysheetEChart({
     n('.'+u).mousedown(function(){return false});
     let S = r.init(document.getElementsByClassName(u)[0]);
     f.animation = false;
+    S.on('finished', function() {
+        // const imgBase = n(`.${u} canvas`)[0].toDataURL('image/png');
+        // console.log(imgBase);
+        html2canvas(n(`.${u}`)[0]).then(function(canvas) {
+            // 将 Canvas 转换为图像(Base64 数据)
+            const imageBase64 = canvas.toDataURL('image/png');
+            sessionStorage.setItem(`print_${u}`, JSON.stringify({
+                src: imageBase64,
+                addr: toExcelColumn(h[0] + 1) + (g[0] + 1) + ":" + toExcelColumn(h[h.length - 1] + 1) + (g[g.length - 1] + 1)
+            }));
+        });
+    })
     S.setOption(f);
     let k = S.getConnectedDataURL({
         type: "png",
@@ -108,4 +121,15 @@ export function cellValueFormat(html) {
         txt += '\r\n'
     }
     return txt
-}
+}
+
+function toExcelColumn(num) {
+    let result = '';
+    while (num > 0) {
+        const remainder = (num - 1) % 26;
+        result = String.fromCharCode(65 + remainder) + result;
+        num = Math.floor((num - 1) / 26);
+    }
+    return result;
+}
+

+ 1820 - 0
chuanyi_client2/src/utils/sheetToXls.js

@@ -0,0 +1,1820 @@
+
+const Excel = require('exceljs')
+export function exportSheetExcel(luckysheet, name = "file", loading) { // 参数为luckysheet.getluckysheetfile()获取的对象
+    // 1.创建工作簿,可以为工作簿添加属性
+    let workbook = new Excel.Workbook();
+    // 2.创建表格,第二个参数可以配置创建什么样的工作表
+    luckysheet.every(function(table) {
+        if (table.data.length === 0) return true;
+        console.log(table)
+        let worksheet = workbook.addWorksheet(name);
+        // 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值
+        setStyleAndValue(table.data, worksheet);
+        setMerge(table.config.merge, worksheet);
+        setBorder(table, worksheet);
+        setImages(table, worksheet, workbook);
+        return true;
+    })
+    // 4.写入 buffer
+    const buffer = workbook.xlsx.writeBuffer();
+    // 5.保存为文件
+    buffer.then(function(buf) {
+        saveFile(buf, name);
+        loading.close()
+        // uploadExcel(buf, uploadpath+"?id="+ getURLParameter('id'))
+    })
+
+}
+
+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);
+    let address;
+    let status = false;
+    if (getURLParameter(ADDRESS_NAME)) {
+        address = getExcelAddress(getURLParameter(ADDRESS_NAME))
+        status = true;
+    }
+    mergearr.forEach(function(elem) { // elem格式:{r: 0, c: 0, rs: 1, cs: 2}
+        // 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
+        if (status) {
+            if (elem.r < address.startR || elem.r + elem.rs > address.endR) {
+                return;
+            }
+            if (elem.c < address.startC || elem.c + elem.cs > address.endC) {
+                return;
+            }
+            worksheet.mergeCells(elem.r - address.startR + 1, elem.c - address.startC + 1,
+                elem.r + elem.rs - address.startR, elem.c + elem.cs - address.startC);
+        } else {
+            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, worksheet, workbook) {
+    let {
+        visibledatacolumn, //所有行的位置
+        visibledatarow //所有列的位置
+    } = {
+        ...table
+    }
+    let address;
+    let status = false;
+    if (getURLParameter(ADDRESS_NAME)) {
+        address = getExcelAddress(getURLParameter(ADDRESS_NAME))
+        status = true;
+    }
+    let chartArr = document.getElementsByClassName('luckysheet-data-visualization-chart')
+    for (let i = 0; i < chartArr.length; i++) {
+        const clzList = chartArr[i].classList
+        for (let j = 0; j < clzList.length; j++) {
+            if (clzList[j].startsWith('chart_clz_')) {
+                const chartJson = JSON.parse(sessionStorage.getItem('print_' + clzList[j]));
+                let addres = chartJson.addr;
+                if (status) {
+                    let addr = getExcelAddress(chartJson.addr)
+                    if (addr.startR < address.startR || addr.endR > address.endR) {
+                        continue;
+                    }
+                    if (addr.startC < address.startC || addr.endC > address.endC) {
+                        continue;
+                    }
+                    addres = toExcelColumn(addr.startC - address.startC + 1) + (addr.startR - address.startR + 1) + ":" +
+                        toExcelColumn(addr.endC - address.startC + 1) + (addr.endR - address.startR + 1);
+                }
+                const imageId = workbook.addImage({
+                    base64: chartJson.src,
+                    extension: 'png'
+                });
+                worksheet.addImage(imageId, addres);
+            }
+        }
+    }
+
+};
+
+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('#', '')
+                }
+            };
+        }
+        let address;
+        if (getURLParameter(ADDRESS_NAME)) {
+            address = getExcelAddress(getURLParameter(ADDRESS_NAME))
+            if (row < address.startR || row > address.endR) {
+                continue;
+            }
+            if (column < address.startC || column > address.endC) {
+                continue;
+            }
+            worksheet.getCell(row - address.startR + 1, column - address.startC + 1).border = border;
+        } else {
+            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;
+    let address;
+    let status2 = false;
+    let stR = 0;
+    let stC = 0;
+    if (getURLParameter(ADDRESS_NAME)) {
+        address = getExcelAddress(getURLParameter(ADDRESS_NAME))
+        status2 = true;
+        stR = address.startR;
+        stC = address.startC;
+    }
+    cellArr.forEach(function(row, rowid) {
+        if (status2) {
+            if (rowid < address.startR || rowid > address.endR) {
+                return;
+            }
+        }
+        const dbrow = worksheet.getRow(rowid + 1);
+        //设置单元格行高,默认乘以1.2倍
+        dbrow.height = luckysheet.getRowHeight([rowid])[rowid] * 0.9;
+        row.every(function(cell, columnid) {
+            if (!cell) return true;
+                const dobCol = worksheet.getColumn(columnid + 1);
+                //设置单元格列宽除以8
+                dobCol.width = luckysheet.getColumnWidth([columnid])[columnid] / 8;
+            if (status2) {
+                if (columnid < address.startC || columnid > address.endC) {
+                    return true;
+                }
+            }
+            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 - stR + 1, columnid - stC + 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;
+
+}
+const ADDRESS_NAME = "address";
+const getURLParameter = (name) => {
+    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
+    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
+    var results = regex.exec(location.search);
+    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
+}

+ 3 - 0
chuanyi_client2/src/views/report_template/index.vue

@@ -806,6 +806,7 @@ import {
 } from "@/utils/cqcy";
 import {getDictByKey} from "@/api/basic";
 import {exportExcel} from "@/utils/export";
+import {exportSheetExcel} from "@/utils/sheetToXls";
 import {insertLuckysheetEChart, cellValueFormat} from "@/utils/luckysheettool";
 import Print from "print-js";
 
@@ -2611,6 +2612,8 @@ export default {
     /** 打印操作 */
     printExcel() {
       const loading = showLoading(this, '请稍候···')
+
+        // exportSheetExcel(luckysheet.getLuckysheetfile(), "报表模板", loading)
       document.querySelector('#print-area').style = "display:block";
       window.luckysheet.hideGridLines();
       //获取当前选中区域