POI - Java - 使用for循环更新Cell

时间:2013-12-13 19:36:00

标签: java loops for-loop apache-poi

我正在尝试使用for循环在excel表的列中写入值列表。

理念是每3页从1开始,我的代码会写两个可能的值。

例如:

for ( q = 0 ; q < my_xls_workbook.getNumberOfSheets(); q=+2)
{
    HSSFSheet my_worksheet = my_xls_workbook.getSheetAt(1);
    HSSFCell cell = null; 
    cell = my_worksheet.getRow(m).getCell(4);
    cell.setCellValue(myStoredValue[m][2]);
    input_document.close();
    FileOutputStream output_file = new FileOutputStream(new    File("C:\\Framework.xls"));
    my_xls_workbook.write(output_file);
    output_file.close();
}       

如果行m已经是存储值,则单元格4是列的第一个单元格,我想要输入值,my_xls_workbook.getSheetAt(1);是它将开始写入值的工作表。根据for循环,它每次都会增加2。

但是当我的代码运行时,我得到NullPointerException可以POI以这种方式工作还是我做错了什么?

我正在学习java,所以我不是专家。还请原谅我的英语。

2 个答案:

答案 0 :(得分:1)

在你的for循环控制中:

for ( q = 0 ; q < my_xls_workbook.getNumberOfSheets(); q=+2)

您正在使用q进行循环(希望这是一个int?),但您的增量为q=+2,其被解释为q = { {1}} - 始终将+2设置为正2.如果您确实只想检查每个第二张,则应为qq += 2

然后,您应该更改获取工作表的方式:q = q + 2应该使用循环变量my_xls_workbook.getSheetAt(1),如下所示:q。否则,您只是每次都在索引1处获取工作表,这可能不存在,因此可能会返回my_xls_workbook.getSheetAt(q)。根据{{​​1}}文档,null是基于0的,所以你的循环是正确的,但你的程序正在抓取索引1,即第二张。

答案 1 :(得分:0)

m Row可能不存在或索引4 Cell不存在。 getRowgetCell方法如果尚未创建,则返回null。检查它们是否为null,并根据需要使用createRow(m)和/或createCell(4)创建它们。