允许范围外的行号(65536)无效(0..65535)

时间:2012-05-25 11:25:48

标签: java file-io xls

我正在从文本文件中读取整数,将它们作为查询的输入并获取查询输出并写入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());
}

我收到错误Invalid row number (65536) outside allowable range (0..65535)

我的contacts.txt文件大约有36000个数字。

4 个答案:

答案 0 :(得分:38)

HSSF的目标是Excel版本(Excel 2003),最多只支持65536行。

您可以尝试使用较新的XSSF API,它支持更高行限制的更高版本的Excel。

有一个conversion guide可以帮助您在两个API之间进行转换。

答案 1 :(得分:2)

如果文本文件中只有36000个项目,则其他内容必定是错误的。

创建一个小样本,比方说,100个条目,然后用它进行测试。

如果可以,请仔细查看生成的Excel文件。看起来好像以下代码是您的问题:

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

我只是在猜测,但是指针++在WHILE中的事实不会导致它每次为记录集中的每个条目创建一个新行吗?

答案 2 :(得分:0)

Excel(可能只有旧版本)只允许65535行。

这是Excel 2003限制的link,实际上是65535行。它在2010年增加到1,048,576

答案 3 :(得分:0)

int person_org_id, external_person_org_id;

你需要将int变量改为Integer,从原语有限制,不能超过-3276732767