diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index 2dd6fc7..3ae83b6 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -1568,11 +1568,22 @@ public Boolean TryGetValue(out T value) { - var currValue = Value; + Object currValue; + try + { + currValue = Value; + } + catch + { + // May fail for formula evaluation + value = default; + return false; + } + if (currValue == null) { - value = default(T); + value = default; return true; } diff --git a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs index 3e9cf66..311659b 100644 --- a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs +++ b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs @@ -792,5 +792,23 @@ var _ = cell.Value; }); } + + [Test] + public void TryGetValueFormulaEvaluation() + { + using (var wb = new XLWorkbook()) + { + var ws = wb.AddWorksheet("Sheet1"); + var A1 = ws.Cell("A1"); + var A2 = ws.Cell("A2"); + var A3 = ws.Cell("A3"); + A1.FormulaA1 = "A2 + 1"; + A2.FormulaA1 = "A1 + 1"; + + Assert.IsFalse(A1.TryGetValue(out String _)); + Assert.IsFalse(A2.TryGetValue(out String _)); + Assert.IsTrue(A3.TryGetValue(out String _)); + } + } } }