diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index 63e46de..58afd37 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -390,22 +390,24 @@ cAddress = fA1; } - if (_worksheet.Workbook.WorksheetsInternal.Any( - w => String.Compare(w.Name, sName, true) == 0) - && XLHelper.IsValidA1Address(cAddress) - ) - { - var referenceCell = _worksheet.Workbook.Worksheet(sName).Cell(cAddress); - if (referenceCell.IsEmpty(false)) - return 0; - else - return referenceCell.Value; - } - object retVal; try { IsEvaluating = true; + + if (_worksheet + .Workbook + .WorksheetsInternal + .Any(w => String.Compare(w.Name, sName, true) == 0) + && XLHelper.IsValidA1Address(cAddress)) + { + var referenceCell = _worksheet.Workbook.Worksheet(sName).Cell(cAddress); + if (referenceCell.IsEmpty(false)) + return 0; + else + return referenceCell.Value; + } + retVal = Worksheet.Evaluate(fA1); } finally diff --git a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs index deab706..2173c3e 100644 --- a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs +++ b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs @@ -637,5 +637,15 @@ }); } } + + public void FormulaWithCircularReferenceFails2() + { + var cell = new XLWorkbook().Worksheets.Add("Sheet1").FirstCell(); + cell.FormulaA1 = "A1"; + Assert.Throws(() => + { + var _ = cell.Value; + }); + } } }