Cayaqui.MPS.ExcelExport 0.1.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Cayaqui.MPS.ExcelExport --version 0.1.1
                    
NuGet\Install-Package Cayaqui.MPS.ExcelExport -Version 0.1.1
                    
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="Cayaqui.MPS.ExcelExport" Version="0.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Cayaqui.MPS.ExcelExport" Version="0.1.1" />
                    
Directory.Packages.props
<PackageReference Include="Cayaqui.MPS.ExcelExport" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Cayaqui.MPS.ExcelExport --version 0.1.1
                    
#r "nuget: Cayaqui.MPS.ExcelExport, 0.1.1"
                    
#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.
#:package Cayaqui.MPS.ExcelExport@0.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Cayaqui.MPS.ExcelExport&version=0.1.1
                    
Install as a Cake Addin
#tool nuget:?package=Cayaqui.MPS.ExcelExport&version=0.1.1
                    
Install as a Cake Tool

Cayaqui.MPS.ExcelExport

Exporta colecciones de DTOs a .xlsx usando los atributos del paquete Cayaqui.MPS.Metadata. Simétrico a Cayaqui.MPS.ExcelImport — decorás tu DTO una sola vez y se importa/exporta con formato consistente.

Distribución propietaria — requiere contrato comercial con Cayaqui. Ver LICENSE.txt.

Dependencias: Cayaqui.MPS.Metadata (se registra automáticamente con AddMpsExcelExport) + licencia Syncfusion XlsIO.

Instalación

dotnet add package Cayaqui.MPS.ExcelExport
builder.Services.AddMpsExcelExport();

Atributos consumidos

Atributo Efecto en el export
[Display(Name, Order, GroupName)] / [Label] Header de columna + orden
[Currency] / [Percentage] / [Date] / [Integer] / [DecimalFormat] / [Duration] Formato de celda nativo (number format string)
[Align] Horizontal alignment (Left/Center/Right)
[ColumnWidth(px)] Ancho de columna
[VisibleIn(RenderTargets.Web)] / [Hidden] Columna omitida del export si no incluye Excel
[Badge(BadgeKind.Success)] Background color de las celdas de la columna
[UpperCase] / [LowerCase] / [TitleCase] / [Truncate] Transform aplicado al string antes de escribir
[ImportIgnore] Excluida también del export (simetría)

[Mask] NO se aplica al export — exportar datos enmascarados sería un bug (pierde el valor original para ediciones). Se respeta el valor sin máscara para que Excel edite bien.

Convenciones importantes

[Percentage] — almacenar ratio 0.0–1.0

Excel interpreta el formato 0.0% multiplicando el valor por 100. Almacenar 75.6 en el DTO produciría 7560% en la celda. Convención correcta:

[Percentage(1)]
public decimal Cpi { get; set; }   // ← almacenar 0.756, NO 75.6

Al exportar, la celda se ve 75.6%. Al importar (round-trip), se recupera 0.756.

[Badge] con enum values — color por fila

Sobre una propiedad enum con [BadgeColor] en cada valor, cada fila recibe el color correspondiente al valor de esa fila:

public enum Status
{
    [BadgeColor(BadgeKind.Success)] Approved,
    [BadgeColor(BadgeKind.Error)]   Rejected
}

[Badge] public Status RowStatus { get; set; }
// En Excel: filas con Approved → verde, filas con Rejected → rojo

[Badge(BadgeKind.Success)] (FixedKind) → toda la columna del mismo color.

Uso

public sealed class InvoiceRow
{
    [Display(Name = "N°", Order = 1)]
    public int InvoiceNumber { get; set; }

    [Label("Cliente")] [Display(Order = 2)]
    public string CustomerName { get; set; } = "";

    [Currency("USD", 2)] [Align(TextAlign.Right)] [ColumnWidth(120)] [Display(Order = 3)]
    public decimal Amount { get; set; }

    [Date("dd-MMM-yyyy")] [Display(Order = 4)]
    public DateTime IssueDate { get; set; }

    [Badge(BadgeKind.Success)] [Display(Order = 5)]
    public bool IsPaid { get; set; }

    [Hidden]
    public int InternalId { get; set; }
}
public class InvoiceExportService(IExcelExporter<InvoiceRow> exporter)
{
    public async Task<Stream> GenerateAsync(IEnumerable<InvoiceRow> rows)
    {
        return await exporter.ExportAsync(rows, new ExcelExportOptions
        {
            SheetName = "Invoices",
            FreezeHeaderRow = true,
            AutoFilter = true,
            HeaderBackgroundColor = "#D9E1F2"
        });
    }
}

ExcelExportOptions

public sealed class ExcelExportOptions
{
    string SheetName = "Data";
    bool IncludeHeader = true;
    bool StyleHeader = true;                           // bold + background
    string HeaderBackgroundColor = "#D9E1F2";
    bool FreezeHeaderRow = true;
    bool AutoFilter = true;
    bool AutoFitColumns = false;                       // usa [ColumnWidth] cuando se declara
    CultureInfo Culture = CultureInfo.InvariantCulture;
}

Tipos nativos vs texto

El exporter respeta el tipo de .NET para que Excel los trate como datos reales (números son sumables, fechas son filtrables):

.NET Excel cell type
int, long, short, byte, decimal, double, float Number
bool Boolean
DateTime, DateTimeOffset, DateOnly DateTime (con format por [Date])
Enum Text (nombre del valor)
string Text (con transforms opcionales)

Round-trip Export → Import

var rows = new[] { new InvoiceRow { ... } };

await using var exported = await exporter.ExportAsync(rows);    // DTO → xlsx
var result = await importer.ImportAsync(exported);              // xlsx → DTO
// result.Rows[0] === rows[0] (values preserved)

Este roundtrip está cubierto por tests.

Tests

Proyecto MPS.Infrastructure.ExcelExport.Tests9 tests ✅:

  • Header + row values con types nativos (number, text, bool)
  • [Hidden] excluye columna
  • [Display(Order)] respeta orden declarado
  • [VisibleIn(Web)] (sin Excel flag) omite columna
  • [Currency] aplica number format a celdas
  • Header styled bold + freeze pane activa
  • Empty collection produce output sólo con header
  • Round-trip: Export → Import preserva valores (int, string, decimal)

Requisitos

  • .NET 10.0 o superior
  • Cayaqui.MPS.Metadata (auto-registrado con AddMpsExcelExport)
  • Licencia Syncfusion Essential Studio (XlsIO)
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.9.1 189 5/26/2026
0.9.0 81 5/26/2026
0.7.4 160 5/19/2026
0.7.3 89 5/19/2026
0.7.2 92 5/18/2026
0.7.1 89 5/18/2026
0.7.0 96 5/18/2026
0.6.0 96 5/18/2026
0.5.1 135 5/10/2026
0.5.0 94 5/10/2026
0.4.0 97 5/10/2026
0.3.0 95 5/10/2026
0.2.0 397 4/24/2026
0.1.1 110 4/24/2026
0.1.0 116 4/24/2026

Initial release. IExcelExporter<T> with Metadata-attribute-driven header labels, cell format, alignment, width, visibility, column order, and badge-based row/cell background color.