2013-04-02 26 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(); 
     } 
    } 
} 
相關問題