我正在使用Java中的Apache poi阅读excel表,我正在使用CellRangeAddress
来获取该区域。
案例1:如果我提供2-3个数据用于合并和下一个单元格,那么它没问题。 我正在进入下一个合并区域。
案例2:如果我提供的值超过6并进入下一个区域,那么合并区域显示IndexOutofBoundException
此处代码:
List<OrganizationDB> orgList = new ArrayList<OrganizationDB>();
List<EmployeeDB> empList;
XSSFWorkbook workBook;
XSSFSheet excelSheet;
XSSFRow row;
XSSFCell cells;
TreeViewer treeViewer = null;
File excelFile = new File("D:\\ExcelExport\\ExcelSheet2.xls");
FileInputStream fis;
if (excelFile.exists()) {
fis = new FileInputStream(excelFile);
workBook = new XSSFWorkbook(fis);
excelSheet = workBook.getSheetAt(0);
int count = 1;
while (count <= excelSheet.getLastRowNum()) {
CellRangeAddress region = excelSheet.getMergedRegion(count);
row = excelSheet.getRow(count);
//XSSFCell cell = row.getCell(0);
orgDb = new OrganizationDB();
orgDb.setOrganizationName(row.getCell(0).getStringCellValue());
orgDb.setCityName(row.getCell(4).getStringCellValue());
orgDb.setStateName(row.getCell(5).getStringCellValue());
empList = new ArrayList<EmployeeDB>();
while(count<=region.getLastRow()) {
row = excelSheet.getRow(count);
empDb = new EmployeeDB();
empDb.setCompanyName(row.getCell(0).getStringCellValue());
empDb.setEmpID(row.getCell(1).getStringCellValue());
empDb.setEmpName(row.getCell(2).getStringCellValue());
empDb.setPhoneNo((int) row.getCell(3).getNumericCellValue());
empList.add(empDb);
orgDb.setEmpList(empList);
count++;
}
orgList.add(orgDb);
}
答案 0 :(得分:0)
我在你的代码中看到了一个我不完全理解的逻辑。你能检查一下吗?
您有两个嵌套while循环使用的计数器count
。
while (count <= excelSheet.getLastRowNum()) {
CellRangeAddress region = excelSheet.getMergedRegion(count);
...
while(count<=region.getLastRow()){
...
count++;
也许有两个合并区域包含第1行到第3行和第4行到第6行,然后在第一次运行顶部while
后,您的计数= 3,因为嵌套while
增加了它。
然后代码尝试获取mergedRegion(3)和
没有mergedRegion与索引3。
必须将mergedRegion(2)与下一组行合并而不是......
我猜你必须为mergedRegions和行使用不同的计数器。