2010-06-30 11 views
17

NPOI è una porta .NET del progetto POI Java, che consente di leggere e scrivere documenti di Microsoft Excel (così come altri formati di Office). NPOI 1.2.2 ha introdotto il supporto per le colonne 'autosizing', per cui la colonna è impostata sulla larghezza della voce cella più ampia nella colonna. Tuttavia, ci sono molti rapporti che questo non funziona. Quindi è possibile?In che modo le colonne possono essere impostate su "autosize" nei documenti Excel creati con NPOI?

+0

Nella mia esperienza l'uso del tipo 'mySheet.AutoSizeColumn (columnIndex);' funziona ma non in tutti i casi. Se la colonna è stata formattata come tabella con Filtro attivato, l'AutoSize che si esegue in Excel facendo doppio clic su Larghezza mentre compensa l'icona Filtro su pull-down. La versione del codice ignora l'icona Filtro. Inoltre, non funziona bene nell'ultima colonna con dati o colonne più larghi di una certa larghezza massima su AutoSize. – cusman

risposta

30

Ho postato questo solo per rispondere, in modo da fornire un record. È è possibile rendere le colonne autosized utilizzando NPOI, ma è necessario aggiungere tutti i dati nelle colonne, anziché nelle righe. Una volta che tutte le celle sono state aggiunte a una colonna @ columnIndex, puoi chiamare

mySheet.AutoSizeColumn(columnIndex) 

e passare alla colonna successiva. Non ho trovato nessun altro modo per far funzionare questa funzionalità.

+1

Non ho aggiunto i dati "in colonne" come suggerito, ma il metodo 'AutoSizeColumn (columnIndex)' ha funzionato perfettamente per me a prescindere. – JohnB

+0

Dispari. Stessa versione? – Yellowfog

+0

Penso che sia stato un errore risolto in una versione successiva perché aggiungo tutti i miei dati come righe e ho usato il metodo sopra indicato. –

3

Come già indicato dal Yellowfog seguito lavorerà

mySheet.AutoSizeColumn(columnIndex) 

Tuttavia alcuni abiguity appare nei messaggi. Sembra essere un metodo che funziona solo dopo aver completato l'inserimento dei dati, stili, ecc Quindi che questo funzionerà

ISheet mySheet = hssfworkbook.CreateSheet("sheet1"); 
IRow row = mySheet.CreateRow(0); 
ICell cell = row.CreateCell(0); 
cell.SetCellValue("foo"); 
mySheet.AutoSizeColumn(0); 

ma il seguente non avrà alcun effetto (perché non ha informazioni a misura automatica contro)

ISheet mySheet = hssfworkbook.CreateSheet("sheet1"); 
mySheet.AutoSizeColumn(0); 
IRow row = mySheet.CreateRow(0); 
ICell cell = row.CreateCell(0); 
cell.SetCellValue("foo"); 
Problemi correlati