【问题标题】:Excel sheet merged cell reading using apache poi in java使用java中的apache poi读取Excel工作表合并单元格
【发布时间】:2017-01-04 11:03:29
【问题描述】:

我正在使用 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);
    }

【问题讨论】:

    标签: java excel apache


    【解决方案1】:

    我在您的代码中看到了一个我不完全理解的逻辑。你能检查一下吗? 您有一个计数器 count 被两个嵌套的 while 循环使用。

    while (count <= excelSheet.getLastRowNum()) {
                CellRangeAddress region      = excelSheet.getMergedRegion(count);
    ...
        while(count<=region.getLastRow()){
    ...
            count++;
    

    也许有两个合并区域,第 1 到第 3 行和第 4 到第 6 行,然后在第一次运行您的顶部 while 后,您的计数 = 3,因为嵌套的 while 增加了它。 然后代码尝试获得 mergeRegion(3) 和 没有索引为 3 的合并区域。 它必须与下一组行合并Region(2)...

    我猜你必须为 mergeRegions 和其中的行使用不同的计数器。

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2014-07-02
      相关资源
      最近更新 更多