从Excel中读取数据并写入列表

我想要获取数据到List并显示它,但是放置显示4次。 我的excel文件包含4数据。 我想得到一个logging。 我的代码是

 public static List readDataFromExcel() throws IOException{ String filename = "path"; List sheetData = new ArrayList(); FileInputStream fis = null; try { fis = new FileInputStream(filename); XSSFWorkbook workbook = new XSSFWorkbook(fis); XSSFSheet sheet = workbook.getSheetAt(0); Iterator rows = sheet.rowIterator(); while (rows.hasNext()) { XSSFRow row = (XSSFRow) rows.next(); Iterator cells = row.cellIterator(); List data = new ArrayList(); while (cells.hasNext()) { XSSFCell cell = (XSSFCell) cells.next(); String value=" "; switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: value = BigDecimal.valueOf(cell.getNumericCellValue()).toPlainString(); data.add(value); break; case Cell.CELL_TYPE_STRING: value=cell.getStringCellValue(); data.add(value); break; case Cell.CELL_TYPE_BLANK: value = " ".toString(); data.add(value); break; case Cell.CELL_TYPE_BOOLEAN: value = Boolean.valueOf(cell.getBooleanCellValue()).toString(); data.add(value); break; } sheetData.add(data); } fis.close(); } } catch (IOException e) { e.printStackTrace(); } return sheetData; } 

主要方法

 public static void main(String[] args) throws IOException { List serverdetailsList = ReadDataFromExcel.readDataFromExcel(); List oneserverdetailsList = new ArrayList(); for (int i = 0; i < serverdetailsList.size(); i++) { System.out.println(serverdetailsList.get(i)); } } 

输出图像enter image description here

Excel ScrenShot 在这里input图像描述

我看到你正在添加内部ArrayList(数据)的主arrayList(sheetdata)多less次,你find一个单元格。

应该是这个方法了

  while (rows.hasNext()) { XSSFRow row = (XSSFRow) rows.next(); Iterator cells = row.cellIterator(); List data = new ArrayList(); while (cells.hasNext()) { XSSFCell cell = (XSSFCell) cells.next(); String value=" "; switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: value = BigDecimal.valueOf(cell.getNumericCellValue()).toPlainString(); data.add(value); break; case Cell.CELL_TYPE_STRING: value=cell.getStringCellValue(); data.add(value); break; case Cell.CELL_TYPE_BLANK: value = " ".toString(); data.add(value); break; case Cell.CELL_TYPE_BOOLEAN: value = Boolean.valueOf(cell.getBooleanCellValue()).toString(); data.add(value); break; } //sheetData.add(data); } sheetData.add(data); fis.close(); } 

每个循环可以使用2

 for(ArrayList innerList :serverdetailsList) {for(Object cellData:innerList ) { if(cellData.toString().equalsIgnoreCase("OS1")){ //Your operation } } } 

希望这是你在找什么!