2013-04-02 24 views
7

这是我目前所知:如何确定合并单元格在某一行

  1. 您使用的方法sheet.getNumMergedRegions()来获得在特定片
  2. 您环路合并区域的数量通过每个计数并使用方法sheet.getMergedRegion(i)并将其分配给CellRangeAddress变量
  3. 然后使用isInRange(rowIndex,colIndex)函数查看特定单元格是否为合并区域的一部分。

但我想做到的是:我想看看是否有可能确定只给出一个特定的行合并单元格。就像我有某一行,我想知道在该行下找到的所有合并区域的计数。

如果有人能分享他们对此事的想法或建议,我将永远感激不尽。

+0

每一行都知道它自己的行号,所以我不明白为什么这和你已经完全详细描述的方法有什么不同。 – jahroy

+0

我同意@jahroy在这里。你只需要设置一些条件来调整你所提到的内容,并且你将拥有一个完全符合你要求的功能。 –

回答

8

这里有一个代码示例,它可以做你想做的事情,我相信。 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(); 
     } 
    } 
} 
相关问题