我正在尝试使用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,所以我不是专家。还请原谅我的英语。
答案 0 :(得分:1)
在你的for循环控制中:
for ( q = 0 ; q < my_xls_workbook.getNumberOfSheets(); q=+2)
您正在使用q
进行循环(希望这是一个int
?),但您的增量为q=+2
,其被解释为q
=
{ {1}} - 始终将+2
设置为正2.如果您确实只想检查每个第二张,则应为q
或q += 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
不存在。 getRow
和getCell
方法如果尚未创建,则返回null
。检查它们是否为null
,并根据需要使用createRow(m)
和/或createCell(4)
创建它们。