2010-02-24 8 views
18

Ich erstelle einen Kalender in Excel. Spalte 1 ist 01.01.2010 (TT.MM.JJJJ), Spalte 2 ist 02.01.2010 und so weiter.Wie bekomme ich mehr als 255 Spalten in einem Excel-Blatt mit Apache POI 3.6

Dies ist mein Code:

int day_cell = 0; 

for(int i = 0; i < days.size(); i++) 
{ 
    Date day = days.get(i); 

    HSSFCell cell = row.createCell(day_cell++); 
    cell.setCellValue(day.toString()); 
} 

Als ich Spalte erhalten 256 POI diese Ausnahme auslöst:

java.lang.IllegalArgumentException: Invalid column index (256). Allowable column range for BIFF8 is (0..255) or ('A'..'IV') 
at org.apache.poi.hssf.usermodel.HSSFCell.checkBounds(HSSFCell.java:926) 
at org.apache.poi.hssf.usermodel.HSSFCell.<init>(HSSFCell.java:162) 
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:141) 
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:119) 

ich diesen Bug-Report gefunden was darauf hindeutet, es in der Version 3.6 behoben. Wir benutzten 3,5, aber der Wechsel zu 3,6 scheint nichts zu nützen. Hat jemand irgendwelche Tipps?

https://issues.apache.org/bugzilla/show_bug.cgi?id=46806

Edit: Scheint, wie das Bug-Problem war über Formeln ..

+0

Ich bin nicht auf der Suche nach anderen API ändern. – Tommy

Antwort

8

Ich fand es heraus. Ich hatte von der org.apache.poi.hssf.usermodel zum org.apache.poi.ss.usermodel wechseln

Diese Sie 16k Spalten oder etwas ähnliches verwenden.

+3

Antwort von @kk1010 bietet eine bessere Erklärung für das "Warum". – jmelanson

3

Sie sollten erwägen von Hoch- auf Querformat (in anderen Worten, zur Umsetzung der Daten) Schalten, so dass Sie 65k verwenden zu Reihen für Tage des Jahres. Dies ist genau das, was ich mit einem Bericht gemacht habe, der eine große Anzahl von Spalten und eine kleine Anzahl von Zeilen erfordert.

Alternativ können Sie das Jahr in 6-monatige Unterperioden aufteilen, jedes auf einem eigenen Blatt.

Dies sind beide Notlösungen, können Ihnen aber je nach den Anforderungen eine "gut genug" Lösung bieten.  

24

Pre-2007 Excel-Sheets eine Begrenzung von 256 Spalten hatte. Diese Blätter erzeugen auch die Erweiterung ".xls". Excel 2007 und höher können 16 KB-Spalten aufnehmen, basieren auf einem XML-Format und generieren das Format ".xlsx". Das POI-Objektmodell für Blätter vor 2007 ist org.apache.poi.hssf.usermodel, während das Objektmodell für Blätter 2007 org.apache.poi.xssf.usermodel ist. Das Paket org.apache.poi.ss.usermodel bietet eine einheitliche Schnittstelle für beide Objektmodelle. Um also mehr als 256 Spalten zu erstellen, müssen Sie Klassen innerhalb des org.apache.poi.xssf.usermodel-Pakets oder innerhalb von org.apache.poi.ss.usermodel verwenden.