wake-up-neo.com

Ungültige Zeilennummer (65536) außerhalb des zulässigen Bereichs (0..65535)

Ich lese Ganzzahlen aus einer Textdatei, gebe sie als Eingabe für eine Abfrage und erhalte die Abfrageausgabe und schreibe in eine XLS-Datei.

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

Ich erhalte die Fehlermeldung Invalid row number (65536) outside allowable range (0..65535) 

Meine contacts.txt-Datei hat ungefähr 36000 Nummern.

22
Cindrella

HSSF zielt auf eine Version von Excel (Excel 2003) ab, die nur maximal 65536 Zeilen unterstützt.

Sie können stattdessen die neuere XSSF - API verwenden, die spätere Versionen von Excel unterstützt, die ein großzügigeres Zeilenlimit aufweisen.

Es gibt einen Konvertierungsleitfaden , der Ihnen beim Konvertieren zwischen den beiden APIs hilft.

35
Simon Nickerson

Wenn Sie nur 36000 Elemente in der Textdatei haben, muss etwas anderes falsch sein.

Erstellen Sie eine kleine Stichprobe, sagen wir, 100 Einträge und testen Sie damit.

Sehen Sie sich die resultierende Excel-Datei genau an, wenn Sie können. Es sieht so aus, als ob der folgende Code Ihr Problem ist:

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++;
        }       

Ich vermute nur, aber wird die Tatsache, dass sich der Index ++ in der WHILE befindet, dazu führen, dass er jedes Mal eine neue Zeile für JEDEN Eintrag in einem Datensatz erstellt? 

2
Ewald

Excel (vielleicht nur ältere Versionen) erlaubt nur 65535 Zeilen.

Hier ist ein Link zu den Grenzwerten von Excel 2003, der tatsächlich 65535 Zeilen beträgt. Es wurde für 2010 auf 1.048.576 erhöht. 

0
brain
int person_org_id, external_person_org_id;

sie müssen die int-Variable ändern, um Integer zu werden. Es gibt eine Begrenzung von primitiv und nicht mehr als -32767 bis 32767

0
Zechreich