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
|
}
|