Live Razor Page Samples
Formula Evaluation
This sample demonstrates evaluating a single Excel compatible formula entered into a web form.
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
namespace Website.Pages.Support.Samples.RazorPages.Calculations
{
public partial class FormulaEvaluationModel : PageModel
{
[BindProperty]
[StringLength(50)]
[Display(Name = "Formula")]
public string Formula { get; set; }
public string Result { get; set; }
public void OnGet()
{
Formula = @"TEXT(STDEV(1, 2, 3, 4), ""0.00"")";
}
public void OnPost()
{
if (!ModelState.IsValid)
{
SetErrorMessage("Error occurred while running sample. Please correct the errors shown below.");
return Page();
}
// Create a new empty workbook and get the first sheet.
SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets[0];
// Evaluate the input formula.
object result = worksheet.EvaluateValue(Formula ?? "");
// Display the result to the user.
if (result == null)
Result = "Empty cell or invalid formula.";
else if (result is SpreadsheetGear.ValueError valueError)
Result = $"Value Error: #{valueError.ToString().ToUpper()}";
else
Result = $@"Result calculated from ISheet.EvaluateValue(""{Formula}""): {result}";
return Page();
}
}
}
@page
@model FormulaEvaluationModel
<div class="row mt-4">
<div class="col-12 offset-0 col-md-10 offset-md-1">
<div class="card">
<h4 class="card-header">Enter an Excel-compatible formula to evaluate:</h4>
<div class="card-body">
<!-- Input Form -->
<form asp-page="FormulaEvaluation" method="post">
<div class="mb-2">
<label asp-for="Formula" class="form-label"></label>
<div class="input-group">
<span class="input-group-text"><i class="fal fa-equals"></i></span>
<input asp-for="Formula" class="form-control" />
</div>
<div class="form-text ms-5">Don't include a leading equals sign in the formula.</div>
</div>
<div class="text-end">
<button class="btn btn-primary"><i class="fa-fw fas fa-play-circle"></i> Evaluate</button>
</div>
</form>
<!-- Output Result Here -->
@if (Model.Result != null)
{
<div class="m-4">
<div class="alert alert-info">
@Model.Result
</div>
</div>
}
</div>
</div>
</div>
</div>