/// <summary> /// Helper method that evaluates the cell's _value, given its content. /// /// The value of a cell can be (1) a string, (2) a double, or (3) a FormulaError. /// (By analogy, the value of an Excel cell is what is displayed in that cell's position /// in the grid.) /// /// If a cell's contents is a string, its value is that string. /// /// If a cell's contents is a double, its value is that double. /// /// If a cell's contents is a Formula, its value is either a double or a FormulaError. /// The value of a Formula, of course, can depend on the values of variables. The value /// of a Formula variable is the value of the spreadsheet cell it names (if that cell's /// value is a double) or is undefined (otherwise). If a Formula depends on an undefined /// variable or on a division by zero, its value is a FormulaError. Otherwise, its value /// is a double, as specified in Formula.Evaluate. /// </summary> public void Evaluate(Formula.Lookup lookup) { if (_contents is Formula) { try { _value = _contents.Evaluate(lookup); } catch (FormulaEvaluationException) { _value = new FormulaError("Formula could not be evaluated."); } } else if (_contents is string || _contents is double) { _value = _contents; } else { throw new Microsoft.CSharp.RuntimeBinder.RuntimeBinderException(); } }
/// <summary> /// Initializes this cell, which will be named (name) and contain content (content). /// /// Note: content will necessarily, by virtue of SetCellContents, be of type string, double, /// or Formula. However, this constructor still calls SetContent to make sure the object /// parameter is always an allowable type. /// </summary> public Cell(dynamic content, Formula.Lookup lookup) { SetContent(content); Evaluate(lookup); }