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 }