2013-08-28 2 views
25

Ich möchte die Anzahl der Spalten einer bestimmten Zeile in Excel. Wie ist das möglich? Ich verwendete POI APIAnzahl der Spalten einer bestimmten Zeile in Excel mit Java erhalten

aber ich konnte nur Spalten zählen bis 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); 

} 

Ich möchte die Anzahl der Spalten bei einer bestimmten Zeilennummer sagen 10. Die Excel-Spalten sind nicht gleiche

Antwort

44

Es gibt zwei Dinge, die Sie

Gebrauch machen können

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

oder

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

Es gibt einen feinen Unterschied zwischen ihnen

  1. O ption 1 gibt die Anzahl der Spalten an, die tatsächlich mit Inhalt gefüllt sind (Wenn die zweite Spalte mit 10 Spalten nicht gefüllt ist, erhalten Sie 9)
  2. Option 2 gibt Ihnen nur den Index der letzten Spalte. Daher 'getLastCellNum()' getan
+2

Nach [ 'getLastCellNum()'] (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Row.html #getLastCellNum()), ist bereits eine hinzugefügt, so dass Sie selbst keine hinzufügen sollten. – rgettman

+0

Mit Änderungen bearbeitet. Danke, dass du das gleiche gesagt hast. –

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