使用 apache poi 解析特定列并在相邻列中打印所需的字符串
using apache poi to parse a particular column and print required string in an adjacent column
我正在尝试使用 java 中的 apache poi 在 xlsx 文件的特定列中打印字符串。我已经使用正则表达式解析了 x 列,并在 y 列中打印了所需的字符串。但是,代码的 getRowNum() 标记了 ConcurrentModificationExceptio。下面是代码片段。请帮忙
|Column X|Column Y|
|Barath |Bar | //Regex Matches Bar and prints it in Column y (Required output).
while (rows.hasNext())
{
row=(XSSFRow) rows.next();
Iterator cells = row.cellIterator();
while (cells.hasNext())
{
cell=(XSSFCell) cells.next();
if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING)
{
Matcher m = p.matcher(cell.getRichStringCellValue().getString());
//rownr = row.getRowNum();
if(m.find()){
sheet.createRow(row.getRowNum()).createCell(colnr+6).setCellValue(row.getCell(colnr+4).toString().substring(m.start(),m.end()-1).replace(":", "")); //row.getRowNum() function causes Concurrent modification exception colnr+6 is destination column and Colnr+4 is column to be parsed.
System.out.print(row.getCell(colnr+4).toString().substring(m.start(),m.end()-1).replace(":", "")+"\n"); //Prints the parsed string in the console correctly
}
}
}
}
看起来,当您创建一行时,原始 rows
集合被修改,而您正在迭代它。因此 ConcurrentModificationException
.
有几种方法可以解决此问题,但在这种情况下,我认为您根本不需要创建该行,因为该行已经存在。所以而不是...
sheet.createRow(...).createCell(colnr+6)
...你会:
row.createCell(colnr+6)
我正在尝试使用 java 中的 apache poi 在 xlsx 文件的特定列中打印字符串。我已经使用正则表达式解析了 x 列,并在 y 列中打印了所需的字符串。但是,代码的 getRowNum() 标记了 ConcurrentModificationExceptio。下面是代码片段。请帮忙
|Column X|Column Y|
|Barath |Bar | //Regex Matches Bar and prints it in Column y (Required output).
while (rows.hasNext())
{
row=(XSSFRow) rows.next();
Iterator cells = row.cellIterator();
while (cells.hasNext())
{
cell=(XSSFCell) cells.next();
if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING)
{
Matcher m = p.matcher(cell.getRichStringCellValue().getString());
//rownr = row.getRowNum();
if(m.find()){
sheet.createRow(row.getRowNum()).createCell(colnr+6).setCellValue(row.getCell(colnr+4).toString().substring(m.start(),m.end()-1).replace(":", "")); //row.getRowNum() function causes Concurrent modification exception colnr+6 is destination column and Colnr+4 is column to be parsed.
System.out.print(row.getCell(colnr+4).toString().substring(m.start(),m.end()-1).replace(":", "")+"\n"); //Prints the parsed string in the console correctly
}
}
}
}
看起来,当您创建一行时,原始 rows
集合被修改,而您正在迭代它。因此 ConcurrentModificationException
.
有几种方法可以解决此问题,但在这种情况下,我认为您根本不需要创建该行,因为该行已经存在。所以而不是...
sheet.createRow(...).createCell(colnr+6)
...你会:
row.createCell(colnr+6)