如何确定某一行中的合并单元格

Isr*_*ato 9 java apache apache-poi

这是我目前所知道的:

  1. 您可以使用方法sheet.getNumMergedRegions()来获取特定工作表中合并区域的数量
  2. 循环遍历每个计数并使用方法sheet.getMergedRegion(i)并分配给CellRangeAddress变量
  3. 然后使用isInRange(rowIndex,colIndex)函数查看特定单元格是否是合并区域的一部分.

但我想要完成的是:我想看看是否可以确定仅给定特定行的合并单元格.就像我有一行,我想知道在该行下找到的所有合并区域的数量.

如果有人能就这件事分享他们的想法或建议,我将永远感激不尽.

Eri*_*las 10

这里有一个代码示例,可以完成您想要的内容.getNbOfMergedRegions返回特定行中合并区域的数量.请记住,POI行号从零开始!

package test;

import java.io.File;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;

public class Main {

    public static int getNbOfMergedRegions(Sheet sheet, int row)
    {
        int count = 0;
        for(int i = 0; i < sheet.getNumMergedRegions(); ++i)
        {
            CellRangeAddress range = sheet.getMergedRegion(i);
            if (range.getFirstRow() <= row && range.getLastRow() >= row)
                ++count;
        }
        return count;
    }

    public static void main(String[] args) {
        File file = new File("/Users/enicolas/Downloads/test.xls");
        try 
        {
            Workbook wb = WorkbookFactory.create(file);  // Line 409 for ref to the exception stack trace
            Sheet sheet = wb.getSheetAt(0);
            for(int row = 0; row < 20; ++row)
            {
                int n = getNbOfMergedRegions(sheet, row);
                System.out.println("row [" + row + "] -> " + n + " merged regions");
            }
            System.out.println(wb);
        }
        catch (Throwable e) 
        {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)