2010-02-24 16 views
18

Sto creando un calendario in Excel. La colonna 1 è 01.01.2010 (gg.MM.aaaa), la colonna 2 è 02.01.2010 e così via.Come ottenere più di 255 colonne in un foglio Excel utilizzando Apache POI 3.6

Questo è il mio codice:

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()); 
} 

Quando arrivo a colonna 256 POI genera questa eccezione:

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) 

Ho trovato questo bug-report che suggerisce è stato risolto nella versione 3.6. Stavamo usando 3.5 ma il passaggio a 3.6 non sembra fare nulla di buono. Qualcuno ha qualche consiglio?

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

Edit: Sembra che il bug-problema era sulle formule ..

+0

Non sto cercando di passare a qualsiasi altra API. – Tommy

risposta

8

L'ho capito. Ho dovuto passare dal org.apache.poi.hssf.usermodel al org.apache.poi.ss.usermodel

Questo permette di usare 16k colonne o qualcosa di simile.

+3

La risposta di @kk1010 offre una spiegazione migliore del "perché". – jmelanson

3

si potrebbe considerare il passaggio da verticale a orizzontale (in altre parole, che recepisce i dati) in modo che si arriva a usare 65k righe per giorni dell'anno. Questo è esattamente ciò che ho fatto con un rapporto che richiede un numero elevato di colonne e un numero ridotto di righe.

In alternativa, è possibile suddividere l'anno in periodi secondari di 6 mesi, ciascuno sul proprio foglio.

Queste sono entrambe soluzioni temporanee, ma potrebbero fornire una soluzione "abbastanza buona", a seconda dei requisiti che si hanno.  

24

pre-2007 fogli excel avuto una limitazione di 256 colonne. Questi fogli generano anche l'estensione ".xls". Excel 2007 e versioni successive possono contenere colonne da 16 K, sono basate su un formato XML e generano il formato ".xlsx". Il modello di oggetto POI per i fogli pre-2007 è org.apache.poi.hssf.usermodel mentre il modello a oggetti per i fogli dal 2007 in poi è org.apache.poi.xssf.usermodel Il pacchetto org.apache.poi.ss.usermodel fornisce un'interfaccia uniforme che copre entrambi i modelli di oggetti. Pertanto, per creare più di 256 colonne, sarà necessario utilizzare le classi all'interno del pacchetto org.apache.poi.xssf.usermodel o all'interno di org.apache.poi.ss.usermodel.

Problemi correlati