Ancho de columna automático en EPPlus


139

¿Cómo hacer que las columnas sean de ancho automático cuando los textos en columnas son largos?

Yo uso este codigo

 Worksheet.Column(colIndex).AutoFitColumn() 'on all columns'
 Worksheet.cells.AutoFitColumns()
 Worksheet.Column(colIndex).BestFit = True  'on all columns'

Ninguno de estos métodos está funcionando.

¿Hay alguna forma de hacerlo funcionar?

Nota: Algunos de mis textos usan Unicode.


2
Worksheet.cells.AutoFitColumns (); funcionará, pero debe agregarse justo después de formatear e imprimir todos los datos.
Suresh Kamrushi

Respuestas:


250

Use AutoFitColumns, pero debe especificar las celdas, supongo que toda la hoja de trabajo:

VB.NET

Worksheet.Cells(Worksheet.Dimension.Address).AutoFitColumns()

C#

Worksheet.Cells[Worksheet.Dimension.Address].AutoFitColumns();

Tenga en cuenta que debe llamar a este método después de completar la hoja de trabajo.


9
Lo importante aquí es que debe llamar a este método después de llenar la hoja de trabajo porque la propiedad Worksheet.Dimension devolverá nulo si no hay datos en la hoja de trabajo.
Landeeyo

@Landeeyo Gracias, me ayuda. Es importante establecer el ancho después de llenar el contenido.
Lanka

3
El método AutoFitColumns no funcionaba para mí cuando no proporcionaba parámetros, cuando le agrego ancho mínimo y máximo, funciona perfectamente.
Zeeshan Ajmal

44
Esta es la respuesta correcta: Pangan debería marcarlo como tal.
GDB

Si ha calculado celdas, debe llamar Worksheet.Calculate()primero para poder determinar el valor de esas celdas.
MikeH

38

He usado este código con la versión 3.1.3.0 de EPPlus y está funcionando:

worksheet.Column(1).AutoFit();

donde una hoja de trabajo es la variable que hace referencia a la hoja de trabajo que he creado en mi código (¡no una clase con un método estático!).

Obviamente, debe llamar a este método después de haber llenado las columnas .


obteniendo error todo el día abajo. "'System.Drawing no es compatible con esta plataforma".
Kursat Turkay

15

Sé que esta es una pregunta antigua, pero utilizo el siguiente código y parece abordar directamente lo que ha intentado hacer.

using (var xls = new ExcelPackage())
{
    var ws = xls.Workbook.Worksheets.Add("Some Name");

    //**Add Column Names to worksheet!**
    //**Add data to worksheet!**

    const double minWidth = 0.00;
    const double maxWidth = 50.00;

    ws.Cells.AutoFitColumns(minWidth, maxWidth);

    return pkg.GetAsByteArray();
}

11

Solo quería señalar que puede ajustar celdas sin especificar el rango, solo asegúrese de llamar a esto después de haber formateado todas las columnas, etc.

worksheet.Cells.AutoFitColumns()

1
Esto funcionó para mí. Recuerde llamarlo después de haber agregado los datos. Cuando lo llamé antes de agregar los datos, no sucedió nada.
mortb

10

Sé que es un poco tarde, pero he tenido el mismo problema hoy. Si tiene un worksheet.DefaultColWidthdefinido, no funcionará. Eliminé esa línea y agregué Worksheet.cells.AutoFitColumns();y funciona ahora.


55
sheet.Cells.AutoFitColumns()es más simple, gracias por el consejo! En ClosedXml, sísheet.Columns().AdjustToContents()
nawfal

6

Está funcionando bien para mí.

Tratar:

ExcelWorksheet wsSheet1 = ExcelPkg.Workbook.Worksheets.Add("Sheet1");
wsSheet1.Cells[wsSheet1.Dimension.Address].AutoFitColumns();
ExcelPkg.SaveAs();

3

Tuve que usar worksheet.Column(1).AutoFit(0);AutoFit () no estaba haciendo el truco.



3

.NET Core como sucesor de .NET ya no admite la función de autoajustar celdas con la biblioteca EPPplus.

worksheet.Cells.AutoFitColumns();

o

worksheet.Column(1).AutoFit();

causa excepción:

"System.Drawing is not supported on this platform."

El ensamblaje System.Drawing depende de las bibliotecas específicas de GDI y Windows que deben reemplazarse por otra solución. La solución para este problema es para mí desconocida.


1

Yo uso esto y está funcionando bien.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.