2010-02-24 15 views
18

Je crée un calendrier dans Excel. La colonne 1 est 01.01.2010 (jj.MM.aaaa), la colonne 2 est 02.01.2010 et ainsi de suite.Comment obtenir plus de 255 colonnes dans une feuille Excel à l'aide d'Apache POI 3.6

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

Quand je reçois à la colonne 256 POI lance cette exception:

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) 

J'ai trouvé ce rapport de bug suggérant qu'il a été corrigé dans la version 3.6. Nous utilisions 3.5 mais changer à 3.6 ne semble pas faire du bien. Quelqu'un at-il des conseils?

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

Edit: On dirait que le bug-question était sur les formules ..

+0

Je ne cherche pas à passer à une autre API. – Tommy

Répondre

8

Je l'ai compris. Je devais passer du org.apache.poi.hssf.usermodel au org.apache.poi.ss.usermodel

Cela vous permet d'utiliser des colonnes ou quelque chose comme 16K.

+3

Réponse par @ kk1010 offre une meilleure explication du "pourquoi". – jmelanson

3

Vous pourriez envisager de passer du mode portrait au paysage (en d'autres termes, la transposition des données) de sorte que vous aurez à utiliser 65k rangées pour les jours de l'année. C'est exactement ce que j'ai fait avec un rapport nécessitant un grand nombre de colonnes et un petit nombre de lignes. Vous pouvez également diviser l'année en sous-périodes de six mois, chacune sur sa propre feuille.

Il s'agit des deux solutions de type «stopgap», mais elles peuvent vous fournir une solution «assez bonne», selon vos besoins.  

24

feuilles Excel pré-2007 ont une limitation de 256 colonnes. Ces feuilles génèrent également l'extension ".xls". Excel 2007 et versions ultérieures peuvent contenir des colonnes de 16 Ko, sont basées sur un format XML et génèrent le format ".xlsx". Le modèle d'objet POI pour les feuilles antérieures à 2007 est org.apache.poi.hssf.usermodel tandis que le modèle objet pour les feuilles 2007 et suivantes est org.apache.poi.xssf.usermodel Le package org.apache.poi.ss.usermodel fournit une interface uniforme couvrant les deux modèles d'objet. Donc, pour créer plus de 256 colonnes, vous devrez utiliser des classes dans le paquet org.apache.poi.xssf.usermodel ou dans org.apache.poi.ss.usermodel.