Larghezza automatica della colonna in EPPlus


139

Come impostare la larghezza automatica delle colonne quando i testi nelle colonne sono lunghi?

Io uso questo codice

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

Nessuno di questi metodi funziona

Ci sono modi per farlo funzionare?

Nota: alcuni dei miei testi usano Unicode.


2
Worksheet.cells.AutoFitColumns (); funzionerà, ma dovrebbe essere aggiunto subito dopo aver formattato e stampato tutti i dati.
Suresh Kamrushi,

Risposte:


250

Usa AutoFitColumns, ma devi specificare le celle, presumo l'intero foglio di lavoro:

VB.NET

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

C #

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

Si noti che è necessario chiamare questo metodo dopo aver compilato il foglio di lavoro.


9
La cosa importante è che è necessario chiamare questo metodo dopo aver riempito il foglio di lavoro perché la proprietà Worksheet.Dimension restituirà null se non ci sono dati nel foglio di lavoro.
Landeeyo,

@Landeeyo Grazie mi aiuta. È importante impostare la larghezza dopo aver riempito il contenuto.
Lanka,

3
Il metodo AutoFitColumns non funzionava per me quando non fornivo parametri, quando aggiungevo la larghezza minima e massima, funziona perfettamente.
Zeeshan Ajmal,

4
Questa è assolutamente la risposta corretta - Pangan dovrebbe contrassegnarla come tale.
GDB,

Se hai celle calcolate, devi Worksheet.Calculate()prima chiamare in modo da poter determinare il valore di quelle celle.
MikeH,

38

Ho usato questo codice con la versione 3.1.3.0 di EPPlus e funziona:

worksheet.Column(1).AutoFit();

dove un foglio di lavoro è la variabile che fa riferimento al foglio di lavoro che ho creato nel mio codice (non una classe con un metodo statico!).

Ovviamente devi chiamare questo metodo dopo aver riempito le colonne .


errore durante tutto il giorno. "'System.Drawing non è supportato su questa piattaforma."
Kursat Turkay,

15

So che questa è una vecchia domanda, ma uso il codice qui sotto e sembra indirizzare direttamente ciò che hai provato a fare.

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

Volevo solo sottolineare che puoi adattare le celle senza specificare l'intervallo, assicurati di chiamarlo dopo aver formattato tutte le colonne ecc:

worksheet.Cells.AutoFitColumns()

1
Questo ha funzionato per me. Ricorda di chiamarlo dopo aver aggiunto i dati. Quando l'ho chiamato prima dell'aggiunta dei dati non è successo nulla.
Mortb

10

So che è un po 'tardi ma oggi ho avuto lo stesso problema. Se hai worksheet.DefaultColWidthdefinito, non funzionerà. Ho rimosso quella linea e aggiunto Worksheet.cells.AutoFitColumns();e funziona ora.


5
sheet.Cells.AutoFitColumns()è più semplice, grazie per la punta! In ClosedXml, lo faisheet.Columns().AdjustToContents()
nawfal il

6

Funziona bene per me.

Provare:

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

3

Ho dovuto usare worksheet.Column(1).AutoFit(0);AutoFit () non stava facendo il trucco.



3

.NET Core come successore di .NET non supporta più la funzione di adattamento automatico delle celle con la libreria EPPplus.

worksheet.Cells.AutoFitColumns();

o

worksheet.Column(1).AutoFit();

causa un'eccezione:

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

L'assembly System.Drawing dipende dalle librerie specifiche di GDI e Windows che devono essere sostituite da un'altra soluzione. La soluzione per questo problema è per me sconosciuta.


1

Lo uso e funziona bene.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.