private void getCellValue(Cell c) { //c = (cell)sender if (c.setText.Length == 0) { c.Value = ""; } else if (!c.setText.StartsWith("=")) //no formula { c.Value = c.setText; } else // formula { if (c.setText.Length > 1) { try { string equation = c.setText.Substring(1); ExpTree xp = new ExpTree(equation); string[] cref = xp.getVariables(); foreach (string name in cref) { double val = getCorrCellVal(name); xp.SetVar(name, val); Cell key = getCorrCell(name); if (!dep.ContainsKey(key)) //add dependency { dep.Add(key, new HashSet <Cell>()); } dep[key].Add(c); } c.Value = xp.Eval().ToString(); } catch { c.Value = "#REF!"; throw; } } } }