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.

Pengan
fuente
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.

Tim Schmelter
fuente
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 .

Daniele Armanasco
fuente
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();
}
TrailTrackers
fuente
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()
johnny 5
fuente
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.

Jose
fuente
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();
leiit
fuente
3

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

xtds
fuente
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.

Ondrej Rozinek
fuente
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()
Jhonny Nina
fuente