2013-04-02 20 views
7

Oto, co wiem do tej pory:Jak ustalić scalone komórki w pewnym Row

  1. użyć sheet.getNumMergedRegions() aby uzyskać liczbę połączonych regionów w danym arkuszu
  2. Ty pętli za każdym razem i użyj metody sheet.getMergedRegion (i) i przypisz do zmiennej CellRangeAddress
  3. Następnie użyj funkcji isInRange (rowIndex, colIndex), aby sprawdzić, czy określona komórka jest częścią scalonego regionu.

Ale co chciałem osiągnąć to: Chcę zobaczyć, czy jest to możliwe do określenia scalone komórki podane tylko konkretny wiersz. Jeśli mam określony wiersz, chcę poznać liczbę wszystkich scalonych regionów znalezionych tylko w tym wierszu.

Będę na zawsze wdzięczny, jeśli ktoś będzie mógł podzielić się swoimi pomysłami i sugestiami na ten temat.

+0

Każdy rząd wie własny numer wiersza, więc nie widzę dlaczego miałoby to być inny niż podejście zostało już opisane w doskonałej szczegółowości. – jahroy

+0

Zgadzam się z @jahroy tutaj. Musisz tylko wprowadzić pewne warunki, aby poprawić to, co wspomniałeś, i będziesz miał funkcję, która spełnia dokładnie to, o co prosisz. –

Odpowiedz

8

Tutaj próbka kodu, która robi to, co chcesz Wierzę. Funkcja getNbOfMergedRegions zwraca liczbę scalonych regionów w określonym wierszu. Pamiętaj, że w wierszach punktów POI zaczynają się od zera!

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(); 
     } 
    } 
}