High-performance CSV and XLSX exporting library for .NET 8+ built on CsvHelper and SpreadCheetah. Convention-based with fluent ExportRule API, supports async streaming, multi-sheet XLSX (1M+ rows), auto-zip for large files, column formatting, decimal precision, enum handling, and minimal API integration. Zero-config with intelligent defaults.
$ dotnet add package PandaTech.FileExporterFileExporter is a lightweight C# library that simplifies file export operations in .NET applications. With support for exporting data to CSV, Excel (XLSX), and PDF formats, FileExporter provides an intuitive interface for developers to quickly generate and download files.
You can install FileExporter via NuGet Package Manager by running the following command:
Install-Package FileExporter
Here's a quick example of how to use FileExporter to export data to a CSV file with old way which is still supported:
using FileExporter;
// Define your data
var data = new List<MyDataClass>
{
new MyDataClass { Name = "John Doe", Age = 30, Email = "john@example.com" },
new MyDataClass { Name = "Jane Smith", Age = 25, Email = "jane@example.com" }
};
// Export data to CSV
var exportedFile = data.ToCsv().ToFile();
// Return the exported file to the caller
return exportedFile;
Starting from release 3.3.0, FileExporter supports exporting data using fluent rules.
First, create an ExportRule for your model. In the constructor, call GenerateRules() to automatically create default rules based on the model. To customize the setup, use the RuleFor() method to configure specific rules for your model's properties. Here's a quick demonstration:
public class FileData
{
public long Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime CreatedAt { get; set; }
public string? Comment { get; set; }
}This sample includes two constructors, one with a default name and one with a custom name.
namespace FileExporter.Tests.ExportRuleTests;
public class FileDataExportRule : ExportRule<FileData>
{
public FileDataExportRule()
{
GenerateRules();
// Custom rules
RuleFor(x => x.Description)
.WriteToColumn("Description")
.WithDefaultValue("Default text here");
RuleFor(x => x.CreatedAt)
.WriteToColumn("Creation date")
.WithDefaultValue("22/08/2024");
}
// OR with custom name
public FileDataExportRule() : base("File Data")
{
GenerateRules();
// Custom rules
RuleFor(x => x.Description)
.WriteToColumn("Description")
.WithDefaultValue("Default text here");
RuleFor(x => x.CreatedAt)
.WriteToColumn("Creation date")
.WithDefaultValue("22/08/2024");
}
}If a property is incorrectly set up, an InvalidPropertyNameException will be thrown with a relevant message.
Here is an example of how to integrate FileExporter into a web API controller:
namespace FileExporter.Demo.Controllers
{
[ApiController]
[Route("api/")]
public class FileDataExportController(ApiDbContext context) : Controller
{
[HttpGet("export-xlsx-via-rules")]
public IActionResult ExportXlsxViaRules()
{
var exportData = context.FileData.ToList();
var rule = new FileDataExportRule();
return rule.ToCsv(exportData).ToFile();
// OR alternative solution with extension method
return rule.ToFileFormat(exportData, ExportType.Xlsx).ToFile();
}
}
}You can also export data to Excel (XLSX) or PDF formats by calling ToXlsx() or ToPdf() respectively.
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
This project is licensed under the MIT License.