2010-02-24 21 views
18

Estoy creando un calendario en Excel. La columna 1 es 01.01.2010 (dd.MM.aaaa), la columna 2 es 02.01.2010 y así sucesivamente.Cómo obtener más de 255 columnas en una hoja de Excel usando Apache POI 3.6

Este es mi código:

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

Cuando llego a la columna 256 PDI lanza esta excepción:

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) 

me encontré con este insecto-informe que sugiere que se fijó en la versión 3.6. Estábamos usando 3.5, pero cambiar a 3.6 no parece hacer ningún bien. ¿Alguien tiene algún consejo?

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

Editar: Parece que el insecto-tema era acerca de las fórmulas ..

+0

No estoy buscando cambiar a ninguna otra API. – Tommy

Respuesta

8

Me di cuenta. Tenía que cambiar de la org.apache.poi.hssf.usermodel a la org.apache.poi.ss.usermodel

Esto le permite utilizar 16k columnas o algo por el estilo.

+3

La respuesta de @kk1010 ofrece una mejor explicación del "por qué". – jmelanson

3

Usted podría considerar el cambio de vertical a horizontal (en otras palabras, la transposición de los datos) de manera que se llega a utilizar 65k filas por días del año. Esto es exactamente lo que hice con un informe que requiere una gran cantidad de columnas y un número pequeño de filas.

Alternativamente, puede dividir el año en períodos secundarios de 6 meses, cada uno en su propia hoja.

Ambas soluciones son provisionales, pero pueden ofrecerle una solución "lo suficientemente buena", según los requisitos que tenga.  

24

Pre-2007 sobresalir sábanas tenían una limitación de 256 columnas. Esas hojas también generan la extensión ".xls". Excel 2007 y en adelante pueden acomodar columnas de 16K, se basan en un formato XML y generan el formato ".xlsx". El modelo de objetos POI para hojas anteriores a 2007 es org.apache.poi.hssf.usermodel, mientras que el modelo de objetos para hojas 2007 en adelante es org.apache.poi.xssf.usermodel El paquete org.apache.poi.ss.usermodel proporciona una interfaz uniforme que cubre ambos modelos de objetos. Por lo tanto, para crear más de 256 columnas, deberá usar las clases dentro del paquete org.apache.poi.xssf.usermodel o dentro de org.apache.poi.ss.usermodel.

Cuestiones relacionadas