diff --git a/Utilidades/Utilidades.vb b/Utilidades/Utilidades.vb index 2eec5e6..77f4826 100644 --- a/Utilidades/Utilidades.vb +++ b/Utilidades/Utilidades.vb @@ -183,36 +183,60 @@ Namespace Utilidades Public Shared Sub IEnumerableAExcel(Of t)(Datos As IEnumerable(Of t), Fichero As String) Dim wb As New ClosedXML.Excel.XLWorkbook Dim dt = tsUtilidades.Extensiones.IEnumerableExtensions.CopyToDataTable(Of t)(Datos) - wb.AddWorksheet(dt) + Dim ws = wb.AddWorksheet(dt) + ws.Columns().AdjustToContents() wb.SaveAs(Fichero) End Sub Public Shared Sub IEnumerableAExcel(Of t)(Datos As List(Of t), Fichero As String) Dim wb As New ClosedXML.Excel.XLWorkbook Dim dt = tsUtilidades.Extensiones.IEnumerableExtensions.CopyToDataTable(Of t)(Datos) - wb.AddWorksheet(dt) + Dim ws = wb.AddWorksheet(dt) + ws.Columns().AdjustToContents() wb.SaveAs(Fichero) End Sub Public Shared Function IEnumerableAExcel(Of t)(Datos As List(Of t)) As Byte() Dim wb As New ClosedXML.Excel.XLWorkbook Dim dt = tsUtilidades.Extensiones.IEnumerableExtensions.CopyToDataTable(Of t)(Datos) - wb.AddWorksheet(dt) + Dim ws = wb.AddWorksheet(dt) + ws.Columns().AdjustToContents() Dim ms As New MemoryStream wb.SaveAs(ms) ms.Position = 0 Return ms.ToArray End Function - Public Shared Function ListaIEnumerableAExcel(Of t)(Datos As List(Of List(Of t)), NombreTablas As List(Of String)) As Byte() + Public Shared Function ListaIEnumerableAExcel(Of T)(Datos As List(Of List(Of T)), NombreTablas As List(Of String)) As Byte() + If Datos Is Nothing OrElse NombreTablas Is Nothing Then + Throw New ArgumentNullException("Los parámetros no pueden ser Nothing.") + End If + + If Datos.Count <> NombreTablas.Count Then + Throw New ArgumentException("La cantidad de listas y nombres de tablas no coincide.") + End If + Dim wb As New ClosedXML.Excel.XLWorkbook + For i = 0 To Datos.Count - 1 Dim tabla = Datos(i) - Dim dt = tsUtilidades.Extensiones.IEnumerableExtensions.CopyToDataTable(Of t)(tabla) - wb.AddWorksheet(dt, NombreTablas(i)) + + ' Evitar error si la lista está vacía + If tabla Is Nothing OrElse tabla.Count = 0 Then + Dim wsVacio = wb.AddWorksheet(NombreTablas(i)) + Continue For + End If + + Dim dt = tsUtilidades.Extensiones.IEnumerableExtensions.CopyToDataTable(Of T)(tabla) + Dim ws = wb.AddWorksheet(dt, NombreTablas(i)) + + ' Autoajuste de columnas + ws.Columns().AdjustToContents() Next - Dim ms As New MemoryStream - wb.SaveAs(ms) - ms.Position = 0 - Return ms.ToArray + + Using ms As New MemoryStream + wb.SaveAs(ms) + Return ms.ToArray() + End Using End Function + End Class End Namespace \ No newline at end of file diff --git a/tsWPFCore.vbproj b/tsWPFCore.vbproj index fcfa8b7..2576aef 100644 --- a/tsWPFCore.vbproj +++ b/tsWPFCore.vbproj @@ -15,11 +15,12 @@ tsWPFCore tsWPFCore net8.0-windows, libreria - 1.3.10 + 1.3.11 Manuel Tecnosis S.A Utilidades para aplicaciones WPF. + - 2026-05-22 V1.3.11 tamaño de columnas automatico en ienumerableaexcel - 2026-03-12 V1.3.10 Se lanza el evento campoactualizado si se ha lanzado con FuerzaValidarControl - 2026-01-19 V1.3.9 Se Corrige hint de previsualizar - 2025-10-20 V1.3.8 Se añade botón de previsualizar