2013-03-26 19 views
85

Come rendere le colonne come larghezza automatica quando i testi nelle colonne sono lunghi?Larghezza automatica colonna in EPPlus

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 stanno lavorando

C'è qualche modo per farlo funzionare?

Nota: alcuni dei miei testi utilizzano Unicode.

risposta

162

Usa AutoFitColumns, ma è necessario specificare le cellule, presumo l'intero foglio di lavoro:

VB.NET

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

C#

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

Si prega di notare è necessario chiamare questo metodo dopo aver riempito il foglio di lavoro.

+1

non funziona. – Pengan

+0

Questo funziona ... Il toString non è nemmeno necessario – Beejee

+6

Importante è qui 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

3

È necessario calcolare la larghezza. Non ci sono funzioni di autosizing nella libreria che funzioneranno come vuoi.

Autofitcolumn non funziona con testo e celle avvolti con formule.

Vedere http://epplus.codeplex.com/discussions/218294?ProjectName=epplus per esempi su come è possibile risolvere il problema.

+0

http://epplus.codeplex.com/discussions/218294?ProjectName=epplus Non riesco a trovare alcuna soluzione funzionante per questo problema. – Pengan

31

Ho usato questo codice con la versione 3.1.3.0 di EPPlus e si sta lavorando:

worksheet.Column(1).AutoFit(); 

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

Ovviamente è necessario chiamare il metodo dopo aver riempito le colonne.

+4

Quest'ultima affermazione deve essere enfatizzata: ** chiama questo metodo dopo aver riempito le colonne ** –

2

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

1

Io uso questo e funziona bene.

Dim objExcel As New ExcelPackage 
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName") 
Sheet.Cells("B1:BN").AutoFitColumns() 
+0

Puoi lasciare una spiegazione più approfondita del tuo codice? – Shawn

7

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

+3

'sheet.Cells.AutoFitColumns()' è più semplice, grazie per il suggerimento! In ClosedXml, si esegue 'sheet.Columns(). AdjustToContents()' – nawfal

6

So che questa è una vecchia domanda, ma io uso il codice qui sotto e sembra indirizzare direttamente quello 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(); 
} 
Problemi correlati