Blame view

online-office/src/global/dynamicArray.js 4.81 KB
wangtao authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
import { getObjType } from '../utils/util';
import { getSheetIndex } from '../methods/get';
import Store from '../store';

//动态数组计算
function dynamicArrayCompute(dynamicArray) {
    let dynamicArray_compute = {};

    if(getObjType(dynamicArray) == "array"){
        for(let i = 0; i < dynamicArray.length; i++){
            let d_row = dynamicArray[i].r;
            let d_col = dynamicArray[i].c;
            let d_f = dynamicArray[i].f;
            
            if(Store.flowdata[d_row][d_col] != null && Store.flowdata[d_row][d_col].f != null && Store.flowdata[d_row][d_col].f == d_f){
                if((d_row + "_" + d_col) in dynamicArray_compute){
                    dynamicArray_compute = dynamicArraySpillEditCompute(dynamicArray_compute, d_row , d_col);
                }

                let d_data = dynamicArray[i].data;
                let d_rowlen = d_data.length;
                let d_collen = 1;

                if(getObjType(d_data[0]) == "array"){
                    d_collen = d_data[0].length;
                }

                if(dynamicArrayRangeIsAllNull({ "row": [d_row, d_row + d_rowlen - 1], "column": [d_col, d_col + d_collen - 1] }, Store.flowdata)){
                    for(let x = 0; x < d_rowlen; x++){
                        for(let y = 0; y < d_collen; y++){
                            let rowIndex = d_row + x;
                            let colIndex = d_col + y;

                            if(getObjType(d_data[0]) == "array"){
                                dynamicArray_compute[rowIndex + "_" + colIndex] = {"v": d_data[x][y], "r": d_row, "c": d_col};
                            }
                            else{
                                dynamicArray_compute[rowIndex + "_" + colIndex] = {"v": d_data[x], "r": d_row, "c": d_col};
                            }
                        }
                    }
                }
                else{
                    dynamicArray_compute[d_row + "_" + d_col] = {"v": "#SPILL!", "r": d_row, "c": d_col};
                }
            }
        }
    }

    return dynamicArray_compute;       
}

function dynamicArraySpillEditCompute(computeObj, r, c) {
    let rowIndex = computeObj[r + "_" + c].r;
    let colIndex = computeObj[r + "_" + c].c;

    for(let x in computeObj){
        if(x == (rowIndex + "_" + colIndex)){
            computeObj[x].v = "#SPILL!";
        }
        else if(computeObj[x].r == rowIndex && computeObj[x].c == colIndex){
            delete computeObj[x];
        }
    }

    return computeObj;
}

//范围是否都是空单元格(除第一个单元格)
function dynamicArrayRangeIsAllNull(range, data) {
    let r1 = range["row"][0], r2 = range["row"][1];
    let c1 = range["column"][0], c2 = range["column"][1];

    let isAllNull = true;
    for(let r = r1; r <= r2; r++){
        for(let c = c1; c <= c2; c++){
            if(!(r == r1 && c == c1) && data[r][c] != null && data[r][c].v != null && data[r][c].v.toString() != ""){
                isAllNull = false;
                break;
            }
        }
    }

    return isAllNull;
}

//点击表格区域是否属于动态数组区域
function dynamicArrayHightShow(r, c) {
    let dynamicArray = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["dynamicArray"] == null ? [] : Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["dynamicArray"];
    let dynamicArray_compute = dynamicArrayCompute(dynamicArray);

    if((r + "_" + c) in dynamicArray_compute && dynamicArray_compute[r + "_" + c].v != "#SPILL!"){
        let d_row = dynamicArray_compute[r + "_" + c].r;
        let d_col = dynamicArray_compute[r + "_" + c].c;

        let d_f = Store.flowdata[d_row][d_col].f;

        let rlen, clen;
        for(let i = 0; i < dynamicArray.length; i++){
            if(dynamicArray[i].f == d_f){
                rlen = dynamicArray[i].data.length;

                if(getObjType(dynamicArray[i].data[0]) == "array"){
                    clen = dynamicArray[i].data[0].length;
                }
                else{
                    clen = 1;
                }
            }
        }

        let d_row_end = d_row + rlen - 1;
        let d_col_end = d_col + clen - 1;

        let row = Store.visibledatarow[d_row_end], 
            row_pre = d_row - 1 == -1 ? 0 : Store.visibledatarow[d_row - 1];
        let col = Store.visibledatacolumn[d_col_end], 
            col_pre = d_col - 1 == -1 ? 0 : Store.visibledatacolumn[d_col - 1];

        $("#luckysheet-dynamicArray-hightShow").css({ 
            "left": col_pre, 
            "width": col - col_pre - 1, 
            "top": row_pre, 
            "height": row - row_pre - 1, 
            "display": "block" 
        });
    }
    else{
        $("#luckysheet-dynamicArray-hightShow").hide();
    }
}

export {
    dynamicArrayCompute,
    dynamicArraySpillEditCompute,
    dynamicArrayRangeIsAllNull,
    dynamicArrayHightShow,
}