使用POI Apache从Excel中读取数据时将数据添加到ArrayList

我正在尝试使用POI Apache从Excel工作表中读取数据。 我遇到的问题是我想同时读取一行的所有单元格的数据,并将其存储在types类的ArrayList中,但输出只是逐个单元格。

这里是打开Excel表格并逐个读取数据的类。

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

数据类

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

在这里输入图像说明

我想在一次这样的Arraylist中添加单元格数据

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

但迭代器返回的数据是一个接一个的,比如先输出1,然后是amit ,然后是shukla ,真是难以添加到数组列表

我试图在一行中向ArrayList添加数据,但是我不能。 如果你帮我解决了这个问题,那真的很有帮助。

this.path = path;

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