PandaTech.FileExporter 4.0.0

dotnet add package PandaTech.FileExporter --version 4.0.0                
NuGet\Install-Package PandaTech.FileExporter -Version 4.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PandaTech.FileExporter" Version="4.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add PandaTech.FileExporter --version 4.0.0                
#r "nuget: PandaTech.FileExporter, 4.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install PandaTech.FileExporter as a Cake Addin
#addin nuget:?package=PandaTech.FileExporter&version=4.0.0

// Install PandaTech.FileExporter as a Cake Tool
#tool nuget:?package=PandaTech.FileExporter&version=4.0.0                

FileExporter

FileExporter 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.

Features

  • Easy Exporting: Simply call ToCsv(), ToXlsx(), or ToPdf() on your data collection to export to the desired format.
  • Automatic Splitting: Handles large datasets by automatically splitting files if the maximum line count or file size is exceeded, then zipping them for easy download.
  • Flexible Configuration: Customize export settings such as column headers, delimiter, and more to suit your needs.
  • Effortless Integration: Seamlessly integrate FileExporter into your existing .NET projects with minimal setup.
  • Helper Extension Methods: Use ToFileFormat(ExportType.Excel) as an alternative to directly calling ToCsv(), ToXlsx(), or ToPdf().

Installation

You can install FileExporter via NuGet Package Manager by running the following command:

Install-Package FileExporter

Usage

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.

Fluent Rules Example

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:

Model Example:

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; }
}

Export Rule Example:

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.

Controller Example:

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.

Contributing

Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.

License

This project is licensed under the MIT License.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on PandaTech.FileExporter:

Package Downloads
Pandatech.SharedKernel.Postgres

Pandatech.SharedKernel.Postgres simplifies PostgreSQL integration in ASP.NET Core applications by providing utilities for Entity Framework Core setup, health checks, and other enhancements.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.0 184 11/21/2024
3.3.3 126 10/18/2024
3.3.2 121 8/27/2024
3.3.1 139 8/23/2024
3.3.0 124 8/23/2024
3.2.0 98 7/19/2024
3.1.1 101 6/28/2024
3.1.0 115 6/28/2024
3.0.10 125 6/28/2024
3.0.9 110 6/21/2024
3.0.8 120 5/13/2024
3.0.7 77 5/2/2024
3.0.6 121 4/29/2024
3.0.5 108 4/29/2024
3.0.4 120 4/26/2024
3.0.3 110 4/26/2024
3.0.2 121 4/26/2024
3.0.1 125 4/26/2024
3.0.0 127 4/26/2024
2.0.2 137 4/4/2024

Upgraded to .net 9