java - tutorial - poi-ooxml
Cómo obtener más de 255 columnas en una hoja de Excel utilizando Apache POI 3.6 (6)
Estoy creando un calendario en excel. La columna 1 es 01.01.2010 (dd.MM.yyyy), la columna 2 es 02.01.2010 y así sucesivamente.
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 POI 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)
Encontré este informe de error que sugiere que se corrigió 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
Edición: Parece que el problema del error era sobre fórmulas ...
Cómo obtener más de 255 columnas en una hoja de Excel utilizando el PDI de Apache
tratar
Workbook workbook = new XSSFWorkbook()
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>`enter code here`
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
Esto se debe a que Excel tiene un número limitado de columnas. Vea esto: http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx
Las hojas de Excel anteriores a 2007 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, están basadas en un formato XML y generan el formato ".xlsx". El modelo de objetos de POI para las hojas anteriores a 2007 es org.apache.poi.hssf.usermodel
mientras que el modelo de objetos para las hojas anteriores a 2007 es org.apache.poi.xssf.usermodel
El paquete org.apache.poi.ss.usermodel
proporciona una Interfaz uniforme que cubre ambos modelos de objetos. Entonces, para crear más de 256 columnas, tendrá que usar clases dentro del paquete org.apache.poi.xssf.usermodel
o dentro de org.apache.poi.ss.usermodel
.
Me lo imaginé. Tuve que cambiar de org.apache.poi.hssf.usermodel a org.apache.poi.ss.usermodel
Esto te permite usar columnas de 16k o algo así.
Podría considerar cambiar de vertical a horizontal (en otras palabras, transponer los datos) para poder usar 65k filas durante los días del año. Esto es exactamente lo que hice con un informe que requiere un gran número de columnas y un pequeño número de filas.
Alternativamente, puede dividir el año en sub periodos de 6 meses, cada uno en su propia hoja.
Ambas son soluciones provisionales, pero pueden proporcionarle una solución "suficientemente buena", según los requisitos que tenga.
Tu problema puede ser con Excel, no con tu API.
El número máximo de columnas en una hoja de cálculo anterior a Excel 2007 es de 256 .