2010-06-30 7 views
17

NPOI ist ein .NET-Port des Java-POI-Projekts, mit dem Microsoft Excel-Dokumente (sowie andere Office-Formate) gelesen und geschrieben werden können. NPOI 1.2.2 hat die Unterstützung für 'Autosizing'-Spalten eingeführt, wobei die Spalte auf die Breite des breitesten Zelleneintrags in der Spalte gesetzt wird. Es gibt jedoch viele Berichte, dass dies nicht funktioniert. So ist es möglich?Wie können Spalten in Excel-Dokumenten, die mit NPOI erstellt wurden, auf 'Autosize' gesetzt werden?

+0

Nach meiner Erfahrung funktioniert die 'mySheet.AutoSizeColumn (columnIndex);' Typ verwenden funktioniert, aber nicht in allen Fällen. Wenn Sie eine Spalte haben, die als Tabelle mit aktiviertem Filter formatiert ist, führt die AutoSize, die Sie in Excel ausführen, einen Doppelklick auf die Breite aus, während das Filter für das Pulldown-Symbol kompensiert wird. Die Codeversion ignoriert das Filtersymbol. Es funktioniert auch nicht gut in der letzten Spalte mit Daten oder Spalten, die breiter sind als eine bestimmte maximale Breite, für die AutoSize verwendet wird. – cusman

Antwort

30

Ich habe dies nur gepostet, um es zu beantworten, um eine Aufzeichnung bereitzustellen. Es ist ist möglich, Spalten mit NPOI Autosized zu machen, aber Sie müssen alle Daten in Spalten hinzufügen, anstatt in Zeilen. Sobald alle Zellen zu einer Spalte @ columnIndex hinzugefügt wurden, rufen Sie dann

auf und gehen Sie zur nächsten Spalte. Ich habe keine andere Möglichkeit gefunden, diese Funktionalität zu nutzen.

+1

Ich habe nicht die Daten "in Spalten" hinzugefügt, wie Sie vorgeschlagen haben, aber die Methode 'AutoSizeColumn (columnIndex) 'funktionierte perfekt für mich unabhängig. – JohnB

+0

Ungerade. Gleiche Version? – Yellowfog

+0

Ich denke, es muss ein Fehler sein, der in einer späteren Version behoben wurde, weil ich alle meine Daten als Zeilen hinzufüge und die obige Methode in Ordnung nutzte. –

3

Wie bereits von Yellowfog zeigte die folgende

mySheet.AutoSizeColumn(columnIndex) 

arbeiten jedoch einige abiguity in den Beiträgen angezeigt. Es scheint, ein Verfahren zu sein, die nur funktioniert, nachdem Sie Daten abgeschlossen haben, Eingabe, Stile etc. So dass dies

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

arbeiten, aber die folgenden keine Wirkung

(weil sie keine Informationen zu Autogröße gegen haben)