leer - read excel java poi
Número de fila no válido(65536) fuera del rango permitido(0..65535) (4)
Excel (quizás solo versiones anteriores) solo permite 65535 filas.
Aquí hay un link a los límites de Excel 2003, que es de hecho 65535 filas. Se incrementó en 2010 a 1,048,576 .
Estoy leyendo números enteros de un archivo de texto, proporcionándolos como entrada para una consulta y obteniendo el resultado de la consulta y escribiendo en un archivo xls.
ResultSet rs;
Connection con = null;
PreparedStatement ps = null;
int person_org_id, external_person_org_id;
File f = null;
Scanner scan = null;
try {
System.out.println("----------checkpoint-----------");
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("----------checkpoint 1-----------");
con = DriverManager.getConnection("jdbc:oracle:thin:@ksdjf.kjdlk.jkd.com:2222:edb", "aaaaa", "aaaa");
System.out.println("----------checkpoint 2 ----------");
if (con == null) {
System.out.println("unable to connect to database");
}
System.out.println("----------checkpoint 3::connected to database---------");
StringBuffer sql = new StringBuffer();
sql.append("select abd from edb.abd where customer_id=510 and person_org_id =? ");
ps = con.prepareStatement(sql.toString());
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Excel Sheet");
HSSFRow rowhead = sheet.createRow(0);
rowhead.createCell(0).setCellValue("ABC");
rowhead.createCell(1).setCellValue("DEF");
f = new File("/tmp/contacts.txt");
scan = new Scanner(f);
int index=1;
while (scan.hasNextInt()) {
person_org_id = scan.nextInt();
ps.setInt(1,person_org_id);
rs= ps.executeQuery();
while (rs.next()) {
external_person_org_id = rs.getInt(1);
HSSFRow row = sheet.createRow(index);
row.createCell(0).setCellValue(person_org_id);
row.createCell(1).setCellValue(external_person_org_id);
index++;
}
}
FileOutputStream fileOut = new FileOutputStream(new File("/tmp/External_contact_id.xls"));
wb.write(fileOut);
fileOut.close();
System.out.println("--------checkpoint 4:: writing data to xls completed------------");
}
catch (Exception e) {
System.out.println(e.getMessage());
}
Recibo un error Invalid row number (65536) outside allowable range (0..65535)
Mi archivo contacts.txt
tiene alrededor de 36000 números.
HSSF apunta a una versión de Excel (Excel 2003) que solo admite un máximo de 65536 filas.
En su lugar, podría intentar usar la nueva API XSSF , que admite versiones posteriores de Excel que tienen un límite de fila más generoso.
Hay una guía de conversión que te ayudará a convertir entre las dos API.
Si solo tiene 36000 elementos en el archivo de texto, otra cosa debe estar mal.
Crea una pequeña muestra, digamos, de 100 entradas, y prueba con eso.
Echa un vistazo al archivo de Excel resultante, si puedes. Parece que el siguiente fragmento de código es tu problema:
while(rs.next()){
external_person_org_id = rs.getInt(1);
HSSFRow row = sheet.createRow(index);
row.createCell(0).setCellValue(person_org_id);
row.createCell(1).setCellValue(external_person_org_id);
index++;
}
Solo estoy adivinando, pero ¿el hecho de que el índice ++ se encuentre en el MOMENTO hará que cree una fila nueva cada vez para CADA entrada en un conjunto de registros?
int person_org_id, external_person_org_id;
necesita cambiar la variable int para convertirse en Integer, hay un límite desde la primitiva y no puede más de -32767
a 32767