2016-05-05 9 views
0

キーワードに基づいてスプレッドシートをフィルタリングしようとしています。私はその後、多次元の文字列配列(セルの値と行)に行を格納します。私は各セルを別々の要素にするようには思えません。すべてのアレイ内のすべてのセルが1列に追加されています:ここで文字列としてHSSF行を保存する方法Java POI

はコードです:

////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

行ごとのforループ内で作成される 'in'変数を移動してはいけませんか? – Gagravarr

+0

Aha。はい。答えとして追加 –

答えて

1

あなたの問題は、あなたが行

あなたが間in配列リストをリセットしていないということです

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

また、毎回セルを保持するための新しいリストを作成してください。

注 - このコードは動作しません。

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

あなたが同じオブジェクトを毎回追加しているので、あなただけの終わりに最後の行の複数のコピーを含むoutになってしまいます!配列への参照を保持しているので、別々のオブジェクトにする必要があります

関連する問題