diff --git a/EPPlus/FormulaParsing/CalculateExtentions.cs b/EPPlus/FormulaParsing/CalculateExtentions.cs
index 1ec584a..22637ac 100644
--- a/EPPlus/FormulaParsing/CalculateExtentions.cs
+++ b/EPPlus/FormulaParsing/CalculateExtentions.cs
@@ -37,6 +37,7 @@
 using System.Text;
 using OfficeOpenXml.FormulaParsing;
 using OfficeOpenXml.FormulaParsing.Exceptions;
+using System.IO;
 namespace OfficeOpenXml
 {
     public static class CalculationExtension
@@ -88,6 +89,11 @@
             Init(worksheet.Workbook);
             //worksheet.Workbook._formulaParser = null; TODO:Cant reset. Don't work with userdefined or overrided worksheet functions            
             var dc = DependencyChainFactory.Create(worksheet, options);
+
+            // Display Calc Chain to determine why formula calculation is taking so long.
+            // Uncomment the following line to display the Calc Chain.
+            // DisplayCalcChain(worksheet, dc);
+
             var parser = worksheet.Workbook.FormulaParser;
             parser.InitNewCalc();
             if (parser.Logger != null)
@@ -97,6 +103,37 @@
             }
             CalcChain(worksheet.Workbook, parser, dc);
         }
+
+        // I added this method in December 2019 to analyze why formula calculation was taking
+        // so long during a 'Regenerate' of a Microsoft Excel table.
+        private static void DisplayCalcChain(ExcelWorksheet worksheet, DependencyChain dc)
+        {
+            // Open Output file
+            string outputFolderName = @"C:\\EPPlus";
+            Directory.CreateDirectory(outputFolderName);
+            DateTime invocationDateTime = DateTime.Now;
+            string outputFileName = Path.Combine(outputFolderName, $"CalcChain_{worksheet.Name}_{invocationDateTime.ToString("yyyyMMdd_HHmmss_fff")}.txt");
+            FileStream fileStream = new FileStream(outputFileName, FileMode.CreateNew);
+            StreamWriter streamWriter = new System.IO.StreamWriter(fileStream, Encoding.UTF8, 65536);
+
+            // Display CalcChain
+            foreach (int index in dc.CalcOrder)
+            {
+                FormulaCell formulaCell = dc.list[index];
+                string calcChainValue = "";
+                calcChainValue += $"Index {index}, ";
+                calcChainValue += $"Worksheet '{formulaCell.ws.Name}', ";
+                calcChainValue += $"Row {formulaCell.Row}, ";
+                calcChainValue += $"Col {formulaCell.Column}, ";
+                calcChainValue += $" Formula '{formulaCell.Formula}'";
+                streamWriter.WriteLine(calcChainValue);
+            }
+
+            // Close Output file
+            streamWriter.Flush();
+            streamWriter.Close();
+        }
+
         public static void Calculate(this ExcelRangeBase range)
         {
             Calculate(range, new ExcelCalculationOption());
