| using System; |
| using System.Collections.Generic; |
| using System.IO; |
| using System.Linq; |
| using System.Text; |
| using OfficeOpenXml; |
| |
| namespace EPPlusSamples |
| { |
| class Sample_FormulaCalc |
| { |
| public static void RunSampleFormulaCalc() |
| { |
| using (var package = new ExcelPackage(new MemoryStream())) |
| { |
| var ws1 = package.Workbook.Worksheets.Add("ws1"); |
| // Add some values to sum |
| ws1.Cells["A1"].Formula = "(2*2)/2"; |
| ws1.Cells["A2"].Value = 4; |
| ws1.Cells["A3"].Value = 6; |
| ws1.Cells["A4"].Formula = "SUM(A1:A3)"; |
| |
| // calculate all formulas on the worksheet |
| ws1.Calculate(); |
| |
| // Print the calculated value |
| Console.WriteLine("SUM(A1:A3) evaluated to {0}", ws1.Cells["A4"].Value); |
| |
| // Add another worksheet |
| var ws2 = package.Workbook.Worksheets.Add("ws2"); |
| ws2.Cells["A1"].Value = 3; |
| ws2.Cells["A2"].Formula = "SUM(A1,ws1!A4)"; |
| |
| // calculate all formulas in the entire workbook |
| package.Workbook.Calculate(); |
| |
| // Print the calculated value |
| Console.WriteLine("SUM(A1,ws1!A4) evaluated to {0}", ws2.Cells["A2"].Value); |
| |
| // Calculate a range |
| ws1.Cells["B1"].Formula = "IF(TODAY()<DATE(2014,6,1),\"BEFORE\" &\" FIRST\",CONCATENATE(\"FIRST\",\" OF\",\" JUNE 2014 OR LATER\"))"; |
| ws1.Cells["B1"].Calculate(); |
| |
| // Print the calculated value |
| Console.WriteLine("IF(TODAY()<DATE(2014,6,1),\"BEFORE\" &\" FIRST\",CONCATENATE(\"FIRST\",\" OF\",\" JUNE 2014 OR LATER\")) evaluated to {0}", ws1.Cells["B1"].Value); |
| |
| // Evaluate a formula string (without calculate depending cells). |
| // That means that if A1 contains a formula that hasn't been calculated it take the value from a1, blank or zero if it's a new formula. |
| // In this case A1 has been calculated (2), so everything should be ok! |
| const string formula = "(2+4)*ws1!A1"; |
| var result = package.Workbook.FormulaParserManager.Parse(formula); |
| |
| // Print the calculated value |
| Console.WriteLine("(2+4)*ws1!A2 evaluated to {0}", result); |
| |
| // Evaluate a formula string (Calculate depending cells) |
| // A1 will be recalculated. |
| var result2 = ws1.Calculate("(2+4)*A1"); |
| |
| } |
| } |
| } |
| } |