write read poi leer desde create java file-io xls

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