How to Generate an Excel File on Razor Pages
Razor Pages offer a modern approach to building web pages. In Razor Pages, the source code that renders the web page is written in C# rather than being generated by a server-side page.
To efficiently work with Excel files, the IronXL library is recommended over others like the POI Java project NPOI package (notably used with PowerPoint files) and Office Interop. IronXL is a feature-rich, easy-to-use library that doesn't require Microsoft Office and supports multiple .NET versions.
This article demonstrates using the IronXL C# library to generate and export Excel spreadsheets with dummy data and row headers in Razor Pages.
How to Generate Excel Files in Razor Pages
- Install C# library to generate Excel files in Razor
- Access or create a new Excel file in a method
- Add data and style to the WorkBook object in Razor
- Use File method to automatically download Excel file when the button is pressed
- Inspect the generated Excel file
IronXL: C# Excel Library
IronXL is a C# Excel library that offers methods and functions for operating on large data sets using parallel processing to increase computing power. It's user-friendly as it doesn't require understanding the inner workings and supports both XLS and XLSX files.
IronXL is ideal for importing, exporting, creating Excel formulas, and office documents without needing Microsoft Office to be installed.
Learn how to import and export Excel files in Razor Pages using IronXL.
Generate Excel File in Razor Pages
To create Excel sheets in Razor Pages, start by opening Visual Studio, creating an ASP.NET Core Web Application, and installing IronXL.
Prerequisites
Setting up to create Excel files in Razor Pages requires:
- Visual Studio (Latest Version)
- .NET Framework 6 or 7
- .NET Core Web Application in Visual Studio
Install IronXL Library
Install IronXL using the NuGet Package Manager Console. Enter this command to install the library in a .NET Core Web Application:
Install-Package IronXL.Excel
Code for Generating Excel file
Here's how to write the code. Open "Index.cs" in the Pages folder and add the following method:
public FileResult OnPostExport()
{
// Create a new WorkBook with XLSX format
WorkBook workBook = new WorkBook(IronXL.ExcelFileFormat.XLSX);
// Create a new WorkSheet named "data"
WorkSheet workSheet = workBook.CreateWorkSheet("data");
// Add headers to the new worksheet
workSheet["A1"].Value = "Product EN";
workSheet["B1"].Value = "SKU";
workSheet["C1"].Value = "Customer";
// Make header text bold
workSheet["A1:C1"].Style.Font.Bold = true;
// Add dummy data to the worksheet
workSheet["A2"].Value = "Iron Rods";
workSheet["A3"].Value = "Mobile Phones";
workSheet["A4"].Value = "Chargers";
workSheet["B2"].Value = "105";
workSheet["B3"].Value = "285";
workSheet["B4"].Value = "301";
workSheet["C2"].Value = "Adam";
workSheet["C3"].Value = "Ellen";
workSheet["C4"].Value = "Tom";
// Convert the WorkBook to a byte array Stream for download
return File(workBook.ToStream().ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Grid.xlsx");
}
public FileResult OnPostExport()
{
// Create a new WorkBook with XLSX format
WorkBook workBook = new WorkBook(IronXL.ExcelFileFormat.XLSX);
// Create a new WorkSheet named "data"
WorkSheet workSheet = workBook.CreateWorkSheet("data");
// Add headers to the new worksheet
workSheet["A1"].Value = "Product EN";
workSheet["B1"].Value = "SKU";
workSheet["C1"].Value = "Customer";
// Make header text bold
workSheet["A1:C1"].Style.Font.Bold = true;
// Add dummy data to the worksheet
workSheet["A2"].Value = "Iron Rods";
workSheet["A3"].Value = "Mobile Phones";
workSheet["A4"].Value = "Chargers";
workSheet["B2"].Value = "105";
workSheet["B3"].Value = "285";
workSheet["B4"].Value = "301";
workSheet["C2"].Value = "Adam";
workSheet["C3"].Value = "Ellen";
workSheet["C4"].Value = "Tom";
// Convert the WorkBook to a byte array Stream for download
return File(workBook.ToStream().ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Grid.xlsx");
}
Public Function OnPostExport() As FileResult
' Create a new WorkBook with XLSX format
Dim workBook As New WorkBook(IronXL.ExcelFileFormat.XLSX)
' Create a new WorkSheet named "data"
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("data")
' Add headers to the new worksheet
workSheet("A1").Value = "Product EN"
workSheet("B1").Value = "SKU"
workSheet("C1").Value = "Customer"
' Make header text bold
workSheet("A1:C1").Style.Font.Bold = True
' Add dummy data to the worksheet
workSheet("A2").Value = "Iron Rods"
workSheet("A3").Value = "Mobile Phones"
workSheet("A4").Value = "Chargers"
workSheet("B2").Value = "105"
workSheet("B3").Value = "285"
workSheet("B4").Value = "301"
workSheet("C2").Value = "Adam"
workSheet("C3").Value = "Ellen"
workSheet("C4").Value = "Tom"
' Convert the WorkBook to a byte array Stream for download
Return File(workBook.ToStream().ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Grid.xlsx")
End Function
In this code, a new Excel WorkBook
is created and contains one WorkSheet
. The sheet is populated with dummy data, and the generated file is responded to the server with:
- The
WorkBook
is converted to aStream
to download as a file. - The MIME type is set.
- A name for the file download is specified.
Create a button to download the Excel file
Replace the existing code in "Index.cshtml" with the following:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<h1 class="display-4">IronXL Generate Excel File</h1>
<p class="m-5">IronXL is an Excel Library for C# that allows developers to read and edit Excel data from XLS and XLSX documents without using Microsoft.Office.Interop.Excel</p>
<form method="post" asp-page-handler="Export">
<button class="btn btn-success p-3">Generate Excel File!</button>
</form>
</div>
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<h1 class="display-4">IronXL Generate Excel File</h1>
<p class="m-5">IronXL is an Excel Library for C# that allows developers to read and edit Excel data from XLS and XLSX documents without using Microsoft.Office.Interop.Excel</p>
<form method="post" asp-page-handler="Export">
<button class="btn btn-success p-3">Generate Excel File!</button>
</form>
</div>
This HTML creates a form with asp-page-handler
set to "Export", enabling the application to export the Excel file to the local machine when the user clicks the "Generate Excel File!" button, triggering a browser download.
Run the Project
Run the project, and you'll see a screen in the browser. Click the green button to download the Excel file.
IronXL Generate Excel Sheets
After clicking "Generate Excel File!", the file will download.
IronXL Downloaded File
Open the Generated Excel File
The generated Excel file's content matches the code's output with perfect formatting. The snapshot of the generated Excel file is displayed below.
IronXL Generated File
IronXL better than Competitors
IronXL is a superior tool for working with both XLS and XLSX formats without limitations like NPOI, which is slower due to being Java-based, whereas IronXL is C#. In ASP.NET Core applications generating large/multiple spreadsheets, opt for IronXL over POI.
IronXL allows for creating and editing Excel files without Microsoft Office. Unlike Microsoft Interop, IronXL does not need to call Microsoft Excel's ActiveX for Excel operations or exports. It also allows exporting CSV files to Excel format.
IronXL also provides extensive features for interacting with Excel files, including converting between popular formats, inserting math functions, adding charts, and inserting images.
Conclusion
This article showcases using IronXL for generating an Excel file in Razor Pages without needing Microsoft Excel ActiveX and facilitating file downloads.
Explore more tutorials on creating Excel files.
IronXL is free for non-commercial development. A free trial is available for production testing. View pricing plans for more pricing and licensing details.
Frequently Asked Questions
How can I generate an Excel file in Razor Pages without using Interop?
You can generate an Excel file in Razor Pages without using Interop by utilizing the IronXL library. This library allows you to create and manipulate Excel files directly in C#, without the need for Microsoft Office, by creating a WorkBook and adding data to a WorkSheet.
What steps are involved in installing IronXL for a Razor Pages project?
To install IronXL for a Razor Pages project, you can use the NuGet Package Manager Console in Visual Studio. Execute the command Install-Package IronXL.Excel
to add the library to your project.
Can I use IronXL to export data from a Razor Pages application?
Yes, IronXL can be used to export data from a Razor Pages application. You can convert your data into Excel format, and then use Razor Pages to stream that data back to the client as a downloadable file.
What are the benefits of using IronXL over Microsoft Interop for generating Excel files?
IronXL offers several benefits over Microsoft Interop, including faster performance, no requirement for Microsoft Office installation, and the ability to handle large datasets efficiently through parallel processing.
Is it possible to handle large Excel datasets in Razor Pages using IronXL?
Yes, IronXL is capable of handling large Excel datasets efficiently. It supports parallel processing, which can improve the performance and speed when working with extensive data.
Does IronXL support different Excel file formats?
IronXL supports both XLS and XLSX file formats, allowing for comprehensive Excel file manipulation, including importing, exporting, and formatting data.
Are there any free options for using IronXL in development?
IronXL is available for free for non-commercial development. A free trial is provided for production testing, with various pricing plans available for commercial use.
How can I trigger an Excel file download in Razor Pages using IronXL?
To trigger an Excel file download in Razor Pages using IronXL, create a WorkBook
, populate it with data, and then convert it to a byte array. Use the Razor Pages File
method to stream the byte array as a downloadable file to the user.
What makes IronXL a preferable choice over other libraries like NPOI?
IronXL is often preferred over libraries like NPOI due to its native C# implementation, which offers faster performance, ease of use, and no dependency on Java components, making it ideal for ASP.NET Core applications.