Cayaqui.MPS.ExcelExport
0.1.1
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
<PackageReference Include="Cayaqui.MPS.ExcelExport" Version="0.1.1" />
<PackageVersion Include="Cayaqui.MPS.ExcelExport" Version="0.1.1" />
<PackageReference Include="Cayaqui.MPS.ExcelExport" />
paket add Cayaqui.MPS.ExcelExport --version 0.1.1
#r "nuget: Cayaqui.MPS.ExcelExport, 0.1.1"
#:package Cayaqui.MPS.ExcelExport@0.1.1
#addin nuget:?package=Cayaqui.MPS.ExcelExport&version=0.1.1
#tool nuget:?package=Cayaqui.MPS.ExcelExport&version=0.1.1
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 conAddMpsExcelExport) + 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.Tests — 9 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 conAddMpsExcelExport)- Licencia Syncfusion Essential Studio (XlsIO)
| Product | Versions 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. |
-
net10.0
- Cayaqui.MPS.Metadata (>= 0.1.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.7)
- Syncfusion.XlsIO.Net.Core (>= 33.2.3)
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.