licp
2024-06-26 dd61d0f5d1176107de45e0d23e25cc0a761b7124
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
let f = 'SUM(MAX(1,2,3)*2-MIN(1,2,3),1,2)'
 
 
function changeParameter(f){
  let regex = /[=\+\-\*\%\(\)\/\^\s]/g;
  let fouList = [
    "SUM",
    'MAX',
    'MIN'
  ]
  f = f.replace(regex, ',')
  fouList.forEach(item=>{
    f = f.replaceAll(item,',')
  })
  let arr = f.split(',').filter(item=>{
    return item&& /[a-zA-Z]/.test(item)
  });
  let arr2 = []
  arr.forEach(item=>{
    if(item.includes(':')){
 
      let r0 = getIdFromColumnName(item.split(':')[0]).r;
      let c0 = getIdFromColumnName(item.split(':')[0]).c;
      let r1 = getIdFromColumnName(item.split(':')[1]).r;
      let c1 = getIdFromColumnName(item.split(':')[1]).c;
      for (let i = Number(r0); i <= Number(r1); i++) {
        for (let u = Number(c0); u <= Number(c1); u++) {
          arr2.push({
            r: i,
            c: u
          })
        }
      }
    }else{
      arr2.push(getIdFromColumnName(item))
    }
  })
  return arr2;
}
function SUM(...val){
  let num = 0;
  if(val&&val.length>0){
    val.forEach(item=>{
      num+=item;
    })
  }
  console.log('SUM',num)
  return num;
}
function MAX(...val){
  let max = 0;
  if(val&&val.length>0){
    max = Math.max(...val)
  }
  console.log('MAX',max)
  return max;
}
function MIN(...val){
  let min = 0;
  if(val&&val.length>0){
    min = Math.min(...val)
  }
  console.log('MIN',min)
  return min;
}
function handel(f){
  console.log(changeParameter(f))
  // console.log(eval(f))
}
 
 
/**
 * 根据坐标获取列名
 * @param {Object} cellId
 */
function getColumnNameFromId(cellId){
    if (! Array.isArray(cellId)) {
        cellId = cellId.split('-');
    }
    var i = cellId[0];
    var letter = '';
    if (i > 701) {
        letter += String.fromCharCode(64 + parseInt(i / 676));
        letter += String.fromCharCode(64 + parseInt((i % 676) / 26));
    } else if (i > 25) {
        letter += String.fromCharCode(64 + parseInt(i / 26));
    }
    letter += String.fromCharCode(65 + (i % 26));
    return letter + (parseInt(cellId[1]) + 1);
}
console.log("getColumnNameFromId",getColumnNameFromId([1,1]))//B2
/**
 * 根据列名获取坐标
 * @param {Object} id
 * @param {Object} arr
 */
function getIdFromColumnName(id, arr) {
    // Get the letters
    var t = /^[a-zA-Z]+/.exec(id);
    if (t) {
        // Base 26 calculation
        var code = 0;
        for (var i = 0; i < t[0].length; i++) {
            code += parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, (t[0].length - 1 - i));
        }
        code--;
        // Make sure jexcel starts on zero
        if (code < 0) {
            code = 0;
        }
 
        // Number
        var number = parseInt(/[0-9]+$/.exec(id));
        if (number > 0) {
            number--;
        }
 
        if (arr == true) {
            id = [ code, number ];
        } else {
            // id = code + '-' + number;
      id = {
        c:code,
        r:number
      }
        }
    }
    return id;
}
 
console.log("getIdFromColumnName",getIdFromColumnName("B2",true))//[1,1]
 
 
export default {
  handel
}