X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.spreadsheet%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fsolver%2Fformula%2FSumFormulaFunction.java;fp=bundles%2Forg.simantics.spreadsheet%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fsolver%2Fformula%2FSumFormulaFunction.java;h=97f864709c14a8be3126106a57e20b6bf4ef7cec;hb=c07a3818f0024e932a27eb85cbfd3f2291475a65;hp=0000000000000000000000000000000000000000;hpb=6c99e980d250fb9201aba93be7dcb1f55564dccd;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/SumFormulaFunction.java b/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/SumFormulaFunction.java new file mode 100644 index 000000000..97f864709 --- /dev/null +++ b/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/SumFormulaFunction.java @@ -0,0 +1,34 @@ +package org.simantics.spreadsheet.solver.formula; + +import org.simantics.spreadsheet.SpreadsheetMatrix; +import org.simantics.spreadsheet.Spreadsheets; +import org.simantics.spreadsheet.solver.formula.parser.ast.AstArgList; +import org.simantics.spreadsheet.solver.formula.parser.ast.AstValue; + +class SumFormulaFunction implements CellFormulaFunction { + + @Override + public Object evaluate(CellValueVisitor visitor, AstArgList args) { + Double sum = 0.0; + for (AstValue value : args.values) { + Object result = value.accept(visitor); + + if (result instanceof SpreadsheetMatrix) { + Object value2 = ((SpreadsheetMatrix) result).sumWithFormulaError(); + if(value2 instanceof String) return value2; //means sumWithFormulaError returned an Error message. + sum += ((Number)value2).doubleValue(); + } else if(result instanceof String && !result.equals("")){ + FormulaError2 error = FormulaError2.forString(result.toString()); + if(error!=null) return error.getString(); + Double v = Spreadsheets.asDoubleWhereEmptyStringIsZero(result); + if(v!=null) + sum += v; + } else if(result instanceof Number){ + sum += ((Number)result).doubleValue(); + } else { + sum += Spreadsheets.asNumber(result); + } + } + return sum; + } +} \ No newline at end of file