2013-08-28 8 views
25

Chcę, aby liczba kolumn określonego wiersza w programie Excel. Jak to możliwe? Użyłem POI APIUzyskaj liczbę kolumn określonego wiersza w danym programie Excel za pomocą Java

, ale mogę uzyskać tylko kolumny liczą do 7.

try 
      { 
       fileInputStream = new FileInputStream(file); 
       workbook = new HSSFWorkbook(fileInputStream); 
       Sheet sheet = workbook.getSheet("0"); 


       int numberOfCells = 0; 
       Iterator rowIterator = sheet.rowIterator(); 
       /** 
       * Escape the header row * 
       */ 
       if (rowIterator.hasNext()) 
       { 
        Row headerRow = (Row) rowIterator.next(); 
        //get the number of cells in the header row 
        numberOfCells = headerRow.getPhysicalNumberOfCells(); 
       } 
       System.out.println("number of cells "+numberOfCells); 

} 

Chcę, aby liczba kolumn przy danym numerze wiersza wynosiła 10. Excel kolumny nie są takie same

Odpowiedz

44

Istnieją dwie rzeczy można zrobić

użycie

int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells(); 

lub

int noOfColumns = sh.getRow(0).getLastCellNum(); 

Istnieje cienka różnica między nimi

  1. O ption 1 daje liczbę kolumn, które są faktycznie wypełnione treścią (jeśli kolumna 2 kolumn 10 nie jest wypełniona otrzymasz 9)
  2. Opcja 2 daje tylko indeks ostatniej kolumny. W związku z tym wykonywać 'getLastCellNum()
+2

Zgodnie [ 'getLastCellNum()'] (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Row.html #getLastCellNum()), jeden już jest dodany, więc nie można go dodać samemu. – rgettman

+0

Edytowane ze zmianami. Dzięki za wskazanie tego samego. –

0
/** Count max number of nonempty cells in sheet rows */ 
private int getColumnsCount(XSSFSheet xssfSheet) { 
    int result = 0; 
    Iterator<Row> rowIterator = xssfSheet.iterator(); 
    while (rowIterator.hasNext()) { 
     Row row = rowIterator.next(); 
     List<Cell> cells = new ArrayList<>(); 
     Iterator<Cell> cellIterator = row.cellIterator(); 
     while (cellIterator.hasNext()) { 
      cells.add(cellIterator.next()); 
     } 
     for (int i = cells.size(); i >= 0; i--) { 
      Cell cell = cells.get(i-1); 
      if (cell.toString().trim().isEmpty()) { 
       cells.remove(i-1); 
      } else { 
       result = cells.size() > result ? cells.size() : result; 
       break; 
      } 
     } 
    } 
    return result; 
} 
Powiązane problemy