# Excel zeilenweise auslesen - POI



## JaninaSt (12. Jun 2012)

Ich habe folgendes Problem:

Ich möchte aus einem Excel - Sheet zeilenweise etwas auslesen und alle Zeilen hintereinander in eine ArrayList abspeichern. Soweit auch kein Problem, allerdings nur wenn ich weiß wieviele Einträge meine Zeile hat.

Hier der Code:


```
public static Object Varianten() {
		
		for (int i = 2; i <= sheet.getLastRowNum(); i++) {
			row = sheet.getRow(i);
   		 
			for (int j = 0; j <= 8; j++){
			
   				// Test der Zelle: 0: Zahlenwert, 1= Textwert, danach den Wert an die ArrayListe anhängen
   		
   				if (row.getCell(j).getCellType() == 0){
   					ColA.add(String.valueOf(row.getCell(j).getNumericCellValue()));
   				} else {
   					ColA.add(row.getCell(j).getStringCellValue());
   				}
   				
   				//Überprüfen ob Zelle einen Inhalt hat, wenn nicht wird die Schleife abgebrochen
   				
   				if(row.getCell(j).getCellType() == Cell.CELL_TYPE_BLANK){
   					break;
   				}
   				
   			}
   		 
		}
		
		return ColA;
		
	}
```

Bei der zweiten for-Schleife möchte ich statt j <= 8 (entspricht Anzahl Zeileneinträge) eine Bedingung finden, die egal wieviele Einträge eine Zeile hintereinander hat, solange erfüllt ist bis der erste leere Eintrag in der Zeile kommt.
Kann mir da jemand helfen? Ich dachte ich kann als Bedingung auch row.getCell(j).getCellType() != Cell.CELL_TYPE_BLANK nehmen, allerdings funktionierts da nicht.

Danke schon mal für eure Hilfe.

Lg


----------



## SlaterB (12. Jun 2012)

inwiefern funktioniert das nicht?
wenn du eine Exception bekommst weil die Row/ Cell gar nicht mehr da ist, dann musst du dort ansetzen,
wenn die Cell da ist und diese Bedingung nicht geht, was ist dann mit der Cell?
untersuche sie weiter in allen Richtungen, 
wenn du etwa den String-Inhalt herausliest, wird dieser doch sicher leer oder null sein?
könnte ja als Bedingung reichen?


----------



## nillehammer (12. Jun 2012)

Es gibt in der Klasse 
	
	
	
	





```
Row
```
 die Methode 
	
	
	
	





```
getLastCellNum()
```
, die genau die Zahl ausgibt, die Du haben willst.


----------



## JaninaSt (12. Jun 2012)

Funktioniert insofern nicht, dass er mir wenn ich die Bedingung darauf ändere, er mir die ArrayList nicht mehr in der Konsole ausgibt...
Fehlermeldung an sich bekomme ich keine.

Danke nillehammer, probier ich gleich aus.


----------



## JaninaSt (12. Jun 2012)

Vielen Dank, mit dem funktionierts prima!


----------



## nillehammer (12. Jun 2012)

[EDIT]Wegen Post #5, ist dieser Post unnötig geworden. War einfach zu langsam...[/EDIT]



> Zeile hintereinander hat, solange erfüllt ist bis der erste leere Eintrag in der Zeile kommt.


Sorry, hatte diesesn Satz hier überlesen. Ist das Deine Hilfsmethode, um zu erkennen, ob eine Zeile zu Ende ist? Dann wäre mein Vorschlag der bessere Ansatz.

Wenn Du aber tatsächlich bei der ersten leeren Zelle abbrechen willst, dann bringt Dich mein Vorschlag auch nicht weiter. Da würde ich Dir empfehlen, eine kleine Hilfsmethode zu schreiben:

```
private static boolean isCellEmpty(final Cell cell) {

                                                                           // Hier wird getrimmt, um Zellen mit nur
                                                                           // Leerzeichen zu berücksichtigen,
                                                                           //weiß nicht ob Du das willst
  return (cell.getCellType == Cell.CELL_TYPE_BLANK) || (cell.getStringValue().trim().isEmpty());
}
```

Die verwendest Du dann in Deiner Schleife:

```
if(isCellEmpty(row.getCell(j)){
  break;
}
```


----------

