From fa5aee05d219940576c11a38ed3da135268c13b6 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期三, 26 六月 2024 17:39:50 +0800 Subject: [PATCH] 完成公式计算 --- src/util/excelFountion.js | 167 ++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 121 insertions(+), 46 deletions(-) diff --git a/src/util/excelFountion.js b/src/util/excelFountion.js index b8c51a1..406c872 100644 --- a/src/util/excelFountion.js +++ b/src/util/excelFountion.js @@ -1,42 +1,5 @@ -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){ @@ -44,7 +7,6 @@ num+=item; }) } - console.log('SUM',num) return num; } function MAX(...val){ @@ -52,7 +14,6 @@ if(val&&val.length>0){ max = Math.max(...val) } - console.log('MAX',max) return max; } function MIN(...val){ @@ -60,13 +21,23 @@ 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)) + +function AVERAGE(...val){ + let num = 0; + if(val&&val.length>0){ + val.forEach(item=>{ + num+=item; + }) + } + return num/val.length; } + +function APS(val){ + return Math.abs(val); +} + /** @@ -88,7 +59,6 @@ letter += String.fromCharCode(65 + (i % 26)); return letter + (parseInt(cellId[1]) + 1); } -console.log("getColumnNameFromId",getColumnNameFromId([1,1]))//B2 /** * 鏍规嵁鍒楀悕鑾峰彇鍧愭爣 * @param {Object} id @@ -128,9 +98,114 @@ return id; } -console.log("getIdFromColumnName",getIdFromColumnName("B2",true))//[1,1] +// 鑾峰彇鍙傛暟鍒楄〃 +function changeParameter(f){ + let arr = getABCList(f) + 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 getABCList(f){ + let regex = /[=\+\-\*\%\(\)\/\^\s]/g; + let fouList = [ + "SUM", + 'MAX', + 'MIN', + 'AVERAGE', + 'APS', + ] + f = f.replace(regex, ',') + fouList.forEach(item=>{ + f = f.replaceAll(item,',') + }) + let arr = f.split(',').filter(item=>{ + return item&& /[a-zA-Z]/.test(item)&&item!='undefined'&&item!='null' + }); + return arr; +} + +function getAllCell(f){ + let arr = changeParameter(f) + let arr0 = {} + arr.forEach(item=>{ + arr0[getColumnNameFromId(`${item.c}`+'-'+`${item.r}`)] = null + }) + return arr0; +} + +// 璁$畻鍏紡 +function compute(f,comValue){ + let str = f + // 鑾峰彇鍗曞厓鏍煎搴斿�� + let arr = getAllCell(f) + for (var a in comValue) { + if(comValue[a]){ + arr[a] = comValue[a] + } + } + // 瑙f瀽鍏紡鍙傛暟锛岀壒鍒槸甯︼細鐨� + let arr0 = getABCList(f) + let obj = {} + arr0.forEach(item=>{ + if(item.includes(':')){ + let arr1 = [] + 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++) { + arr1.push({ + r: i, + c: u + }) + } + } + let arr2 = [] + arr1.forEach(m=>{ + arr2.push(getColumnNameFromId(`${m.c}`+'-'+`${m.r}`)) + }) + obj[item.split(':').join('-')] = arr2.join(',') + }else{ + obj[item] = item + } + }) + str = str.replaceAll(':', '-') + // 鏇挎崲鍙傛暟 + for (var a in obj) { + str = str.replaceAll(a, obj[a]) + } + // 璁$畻 + try{ + for (var a in arr) { + str = str.replaceAll(a, arr[a]) + } + return eval(str) + }catch(e){ + console.log('e',e) + return 0 + } +} export default { - handel + compute, + changeParameter } -- Gitblit v1.9.3