2016-05-05 8 views
0

Ich versuche, eine Tabelle basierend auf einem Schlüsselwort zu filtern. Ich möchte dann die Zeilen in einem mehrdimensionalen String-Array (Zellenwerte und Zeilen) speichern. Ich kann nicht scheinen, dass jede Zelle ein separates Element ist. Alle Zellen in allen Arrays werden zu einem Array hinzugefügt:So speichern Sie HSSF-Zeilen als String Java POI

Hier ist der Code:

////Adding each filtered row to an ArrayList 

FileInputStream fis = new FileInputStream(new File("myfile.xls")); 
     HSSFWorkbook  workBook = new HSSFWorkbook (fis); 
     HSSFSheet   sheet = workBook.getSheetAt (0); 

     List<HSSFRow> filteredRows = new ArrayList<HSSFRow>(); 
     ArrayList<List<HSSFRow>> TwoD = new ArrayList<List<HSSFRow>>(); 
     Iterator<Row> rows= sheet.rowIterator(); 
     while (rows.hasNext()){ 
     HSSFRow row = (HSSFRow) rows.next(); 
     Iterator<Cell> cells = row.cellIterator(); 
     while (cells.hasNext()){ 
      HSSFCell cell = (HSSFCell) cells.next(); 
       if (cell.toString().contains("GHH")) { 
        filteredRows.add(row); 
       } 
     } 
     } 

/////// Now iterating through the filteredRows arrayList and turn it into multidimensional String array 

     ArrayList<String> in =new ArrayList<String>(); 
     ArrayList<List<String>> out = new ArrayList<List<String>>(); 
     for (HSSFRow n:filteredRows){ 

      Iterator<Cell> cells = n.cellIterator(); 
      while (cells.hasNext()){ 
       HSSFCell cell = (HSSFCell) cells.next(); 
       in.add(cell.toString()); 

      } 
      out.add(in); 
     } 

     workBook.close(); 
+0

Sollten Sie die 'in'-Variable, die in Ihrer pro-for-for-loop-Schleife erstellt werden soll, nicht verschieben? – Gagravarr

+0

Aha. Ja. Fügen Sie als Antwort hinzu –

Antwort

1

Ihr Problem ist, dass Sie nicht die in Array-Liste zwischen den Reihen Zurücksetzen

Sie entweder es ändern müssen so etwas wie sein: zum halten sie Ihre Zellen jedes Mal

ArrayList<List<String>> out = new ArrayList<List<String>>(); 
for (HSSFRow n:filteredRows){ 
    ArrayList<String> in =new ArrayList<String>(); 
    for (Cell cell : n) { 

und erstellen sie eine neue Liste.

Hinweis - Dieser Code wird nicht funktionieren:

ArrayList<String> in =new ArrayList<String>(); 
ArrayList<List<String>> out = new ArrayList<List<String>>(); 
for (HSSFRow n:filteredRows){ 
    for (Cell cell : n) { 
     // Logic here 
    } 
    out.add(in); 
    in.clear(); 
} 

Weil Sie das gleiche Objekt jedes Mal das Hinzufügen bist, hast du am Ende nur mit out am Ende mehrere Kopien der letzten Zeile mit! Da Sie die Verweise auf die Arrays behalten, müssen sie separate Objekte sein.

Verwandte Themen