我正在使用Apache POI阅读Excel文件。 我的Excel表结构就像这样
|2000s| 2001, 2003, 2008, 2009|
所以对于右侧数据,我要求它分配到2000s
直到现在我已经实现了这个方式:
List<Class> list = new ArrayList<Class>();
File file = new File(file_path);
FileInputStream fis = new FileInputStream(file);
//Create an instance of workbook which refers to an excel file
XSSFWorkbook wb = new XSSFWorkbook(fis);
//This selects the 1st sheet
XSSFSheet sheet = wb.getSheetAt(0);
//Iterate through each row one by one
Iterator<Row> itr = sheet.iterator();
String newName = null;
String oldName = null;
while(itr.hasNext()){
Row nextRow = itr.next();
// For each row, iterate through all the columns
Iterator<Cell> cellIterator = nextRow.cellIterator();
while (cellIterator.hasNext())
{
Cell cell = cellIterator.next();
newName = nextRow.getCell(0).toString();
if(nextRow.getCell(1).toString().contains(",")){
StringTokenizer st = new StringTokenizer(nextRow.getCell(1).toString(),",");
while(st.hasMoreTokens()){
oldName = st.nextToken();
}
}
else{
oldName = nextRow.getCell(1).toString();
}
}
System.out.println();
}
当我编译时,它会抛出我&#34;空指针异常&#34;在nextRow.getCell(1)
行。
我不明白如何将所有逗号值映射到2000s。
这对于普通数据(没有逗号)非常有效。
答案 0 :(得分:0)
已处理逗号值
我发布了答案,所以有人可以从这里得到帮助。
我所做的是 - 添加了String Tokenizer类,如果单元格中有逗号,它会用逗号分隔符破坏该值。
让我们看看下面的代码
while(itr.hasNext()){
Row nextRow = itr.next();
// For each row, iterate through all the columns
Iterator<Cell> cellIterator = nextRow.cellIterator();
while (cellIterator.hasNext())
{
Cell cell = cellIterator.next();
newName = nextRow.getCell(0).toString();
if(nextRow.getCell(1).toString().contains(",")){
StringTokenizer st = new StringTokenizer(nextRow.getCell(1).toString(),",");
while(st.hasMoreTokens()){
oldName = st.nextToken();
}
}
else{
oldName = nextRow.getCell(1).toString();
}
}
System.out.println();
}
此处 newName 获取1st col。的值(2000s) 和 oldName 根据','分隔符获取令牌 - 在这种情况下2001,2003,2008,2009
对于 oldName 的所有这些值, newName 2000s将被映射。
更新:原因我得到'空指针异常',因为第二列(nextRow.getCell(1))的某些单元格为空。
因此,只要迭代器到达空单元格,它就会抛出Null Pointer Exception。 您需要在此处指定缺少单元格政策
通过
Cell cell2 = row.getCell(j,org.apache.poi.ss.usermodel.Row.CREATE_NULL_AS_BLANK);
(它只是将空值视为空白)
通过这种方式,您还可以在读取空值时解析Excel中的空指针异常