# C1.WPF.FlexGrid.C1FlexSheet.CalcEngine

## Content

<div class="doc-site-dotnet-api-container">



<h1 id="C1_WPF_FlexGrid_C1FlexSheet_CalcEngine_" data-uid="C1.WPF.FlexGrid.C1FlexSheet.CalcEngine*">CalcEngine Property
</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>



<a id="C1_WPF_FlexGrid_C1FlexSheet_CalcEngine_" data-uid="C1.WPF.FlexGrid.C1FlexSheet.CalcEngine*"></a>
<h4 id="C1_WPF_FlexGrid_C1FlexSheet_CalcEngine" data-uid="C1.WPF.FlexGrid.C1FlexSheet.CalcEngine">CalcEngine</h4>
<div class="markdown level1 summary"><p>Gets a reference to the FlexGrid calc engine.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">public ExcelCalcEngine CalcEngine { get; }</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">Public ReadOnly Property CalcEngine As ExcelCalcEngine</code></pre>
</div>
<h5 id="C1_WPF_FlexGrid_C1FlexSheet_CalcEngine_remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>The CalcEngine responsible for all calculation jobs underlying the FlexSheet. The major jobs are parsing and evaluating the expressions.</p>
</div>
<h5 id="C1_WPF_FlexGrid_C1FlexSheet_CalcEngine_examples">Examples</h5>
<p>This sample showing how to register a custom function to the CalcEngine.</p>
<pre><code class="lang-csharp">flexSheet.CalcEngine.RegisterFunction("GREATEST", 1, (expressions) =&gt;
{
    CellRangeReference rangeReference = (expressions[0] as XObjectExpression).Value as CellRangeReference;
    if (rangeReference != null)
    {
        var enumerator = rangeReference.GetEnumerator();
        double greatest = double.MinValue;
        while (enumerator.MoveNext())
        {
            double? v = (enumerator.Current as double?);
            if (v.HasValue)
                greatest = Math.Max(greatest, v.Value);
        }
        return greatest;
    }
    return null;
});</code></pre>

</div>
