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