2016-07-22 21 views
0

Ich versuche, Daten aus Excel-Tabellen mit POI Apache zu lesen. Das Problem, das ich habe, ist, dass ich die Daten aller Zellen einer Zeile gleichzeitig lesen und in ArrayList der Typklasse speichern möchte, aber die Ausgabe ist nur Zelle für Zelle.Hinzufügen von Daten zu ArrayList beim Lesen von Daten aus Excel mit POI Apache

Hier ist die Klasse, die das Excel-Blatt öffnen und die Daten Zelle für Zelle lesen.

package testing; 

import javax.swing.JFileChooser; 
import java.io.File; 
import java.io.FileInputStream; 

import java.io.FileOutputStream; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 
import java.util.TreeMap; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class ReadExcelDemo 
{ 
    ArrayList<Data> list = new ArrayList<>(); 
    String path; 

    public ReadExcelDemo(String path) 
    { 
     this.path = path; 

     try 
     { 
      FileInputStream file = new FileInputStream(new File(path)); 

      //Create Workbook instance holding reference to .xlsx file 
      XSSFWorkbook workbook = new XSSFWorkbook(file); 

      //Get first/desired sheet from the workbook 
      XSSFSheet sheet = workbook.getSheetAt(0); 

      System.out.println(""); 

      //Iterate through each rows one by one 
      Iterator<Row> rowIterator = sheet.iterator(); 
      while (rowIterator.hasNext()) 
      { 
       Row row = rowIterator.next(); 
       //For each row, iterate through all the columns 
       Iterator<Cell> cellIterator = row.cellIterator(); 

       while (cellIterator.hasNext()) 
       { 
        Cell cell = cellIterator.next(); 
        //Check the cell type and format accordingly 
        switch (cell.getCellType()) 
        { 
         case Cell.CELL_TYPE_NUMERIC: 
          System.out.print(cell.getNumericCellValue() + "\t"); 

          break; 
         case Cell.CELL_TYPE_STRING: 
          System.out.print(cell.getStringCellValue() + "\t"); 
          break; 
        } 
       } 


       System.out.println(""); 
      } 
      file.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

Datenklasse

package testing; 


public class Data { 


    int ID; 
    String F_Name,L_Name; 




    public Data(int ID, String F_Name, String L_Name) { 
     this.ID = ID; 
     this.F_Name = F_Name; 
     this.L_Name = L_Name; 
    } 


    public int getID() { 
     return ID; 
    } 

    public String getF_Name() { 
     return F_Name; 
    } 

    public String getL_Name() { 
     return L_Name; 
    } 

enter image description here

Ich möchte die Zellendaten in Arraylist wie diese zu einem einzigen Zeitpunkt

List.add(new Data(1,"Amit","shukla")); 

hinzufügen, aber die Daten der Iterator Rückkehr eins nach dem anderen wie es zuerst ausgibt th en amit und dann shukla, die wirklich schwer zu addieren

ich so viel zu Arraylist versucht, Daten zu Arraylist hinzuzufügen auf einer einzigen Linie, aber ich konnte nicht. Es wäre wirklich hilfreich, wenn Sie mir helfen, dieses Problem zu lösen.

+0

können Sie nicht nur die Setter, um Ihre Daten Klasse hinzufügen und sie entsprechend bauen, wenn sie in einer Reihe durch alle Zellzyklus und dann, wenn die Zeile es gemacht wird in der Arraylist? – Zeromus

Antwort

1

this.path = Pfad;

try 
    { 
     FileInputStream file = new FileInputStreaHashMap<K, V>ile(path)); 
     HashMap<Integer, Data> mp= new HashMap<Integer, Data>(); 
     //Create Workbook instance holding reference to .xlsx file 
     XSSFWorkbook workbook = new XSSFWorkbook(file); 

     //Get first/desired sheet from the workbook 
     XSSFSheet sheet = workbook.getSheetAt(0); 

     System.out.println(""); 

     //Iterate through each rows one by one 
     Iterator<Row> rowIterator = sheet.iterator(); 
     while (rowIterator.hasNext()) 
     { 
      Row row = rowIterator.next(); 
      //For each row, iterate through all the columns 
      Iterator<Cell> cellIterator = row.cellIterator(); 

      while (cellIterator.hasNext()) 
      { 
       Cell cell = cellIterator.next(); 
       //Check the cell type and format accordingly 
       int i=0; 
       int j=0; 
       switch (cell.getCellType()) 
       { 
        case Cell.CELL_TYPE_NUMERIC: 
         System.out.print(cell.getNumericCellValue() + "\t"); 
          i=Integer.parseInt(cell.getNumericCellValue()); 
          Data d= new Data(); 
          d.setId(cell.getNumericCellvalue()); 


         break; 
        case Cell.CELL_TYPE_STRING: 
         System.out.print(cell.getStringCellValue() + "\t"); 
         if(j==0){ 
         Data data= mp.get(i); 
         data.setName(cell.getStringCellValue()); 
         mp.put(i, data); 
         j=j+1; 
         } 
         else 
         { 
          Data data= mp.get(i); 
          data.setLastName(cell.getStringCellValue()); 
          mp.put(i, data); 
          j=0; 
         } 
         break; 
       } 
      } 


      System.out.println(""); 
     } 
     List<Data> dataList= new ArrayList<Data>(); 
     for (Data d : mp.values()) { 
      dataList.add(d); 

     } 
     file.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
+0

Erstellen Sie eine HashMap, die ID- und Datenobjekte enthält und Werte später in List konvertiert. DataList hat die erforderliche Objektliste – user2025528