如何从基于Excel的Java中使用POI的一些独特的价值读取特定的行?

我正在尝试根据一些独特的价值获得logging。

例; 它有一个与emp名称,emp ID,emp地址的值的表,我想获取基于emp ID的logging。

这个代码我也试过这个代码从文件中读取数据不是从开始。

package org.xlsx.read; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * 015 * @author giftsam 016 */ public class ExcelSheetReader { /** * 021 * This method is used to read the data's from an excel file. 022 * @param * fileName - Name of the excel file. 023 */ private void readExcelFile(String fileName) { /** * Create a new instance for cellDataList */ List cellDataList = new ArrayList(); try { /** * 033 * Create a new instance for FileInputStream class 034 */ FileInputStream fileInputStream = new FileInputStream(fileName); /** * Create a new instance for POIFSFileSystem class */ POIFSFileSystem fsFileSystem = new POIFSFileSystem(fileInputStream); /* * 043 * Create a new instance for HSSFWorkBook Class 044 */ HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem); HSSFSheet hssfSheet = workBook.getSheetAt(0); /** * Iterate the rows and cells of the spreadsheet 050 * * to get * all the datas */ Iterator rowIterator = hssfSheet.rowIterator(); while (rowIterator.hasNext()) { HSSFRow hssfRow = (HSSFRow) rowIterator.next(); Iterator iterator = hssfRow.cellIterator(); List cellTempList = new ArrayList(); while (iterator.hasNext()) { HSSFCell hssfCell = (HSSFCell) iterator.next(); cellTempList.add(hssfCell); } cellDataList.add(cellTempList); } } catch (Exception e) { e.printStackTrace(); } /** * Call the printToConsole method to print the cell data in the console. */ printToConsole(cellDataList); } /** * This method is used to print the cell data to the console. * * @param cellDataList * - List of the data's in the spreadsheet. */ private void printToConsole(List cellDataList) { for (int i = 0; i < cellDataList.size(); i++) { List cellTempList = (List) cellDataList.get(i); for (int j = 0; j < cellTempList.size(); j++) { HSSFCell hssfCell = (HSSFCell) cellTempList.get(j); String stringCellValue = hssfCell.toString(); System.out.print(stringCellValue + "\t"); } System.out.println(); } } public static void main(String[] args) { String fileName = "D:/workspace/ReadExlsx/xlsx/Access_Control_Report_01-04-2012to30-04-2012.xls"; new ExcelSheetReader().readExcelFile(fileName); } } 

这个代码打印出来这样放。

 292 Manikiruban Jaganathan 001 Esg 05/04/2012 09:11:28 19:06:06 292 Manikiruban Jaganathan 001 Esg 06/04/2012 09:01:07 19:02:37 292 Manikiruban Jaganathan 001 Esg 09/04/2012 09:02:08 19:39:29 292 Manikiruban Jaganathan 001 Esg 10/04/2012 09:13:20 18:54:05 292 Manikiruban Jaganathan 001 Esg 11/04/2012 09:31:55 18:33:03 

我的Excel表单看起来像这样:

 Sling Media Pvt Ltd First and Last Record Details Report From 01/04/2012 to 30/04/2012 Report Prepared on: 10/05/2012 at 12:51 EmpID EmpName SiteCode Department Type Date First Last Location 1 Kr Veerappan 123 Hardware Team 02/04/2012 10:30:39 20:23:14 1 Kr Veerappan 123 Hardware Team 03/04/2012 09:46:01 19:58:16 1 Kr Veerappan 123 Hardware Team 04/04/2012 10:06:26 19:58:31 1 Kr Veerappan 123 Hardware Team 05/04/2012 11:38:51 19:32:17 1 Kr Veerappan 123 Hardware Team 06/04/2012 10:43:06 21:02:06 1 Kr Veerappan 123 Hardware Team 09/04/2012 11:02:32 22:05:14 1 Kr Veerappan 123 Hardware Team 10/04/2012 10:49:41 19:07:48 1 Kr Veerappan 123 Hardware Team 11/04/2012 10:16:42 20:30:13 1 Kr Veerappan 123 Hardware Team 12/04/2012 10:15:54 19:54:51 1 Kr Veerappan 123 Hardware Team 13/04/2012 10:18:30 19:05:55 1 Kr Veerappan 123 Hardware Team 18/04/2012 10:52:37 18:50:36 1 Kr Veerappan 123 Hardware Team 19/04/2012 10:24:59 20:29:59 1 Kr Veerappan 123 Hardware Team 20/04/2012 10:29:47 18:58:23 1 Kr Veerappan 123 Hardware Team 23/04/2012 10:24:31 20:11:29 1 Kr Veerappan 123 Hardware Team 24/04/2012 10:13:18 19:05:25 

谢谢安东尼

假设你想获取eid = 1的员工,那么你可以在console.上打印一张支票console. 既然你不知道哪一行包含eid = 1,所以你必须parsing每一行。

从输出看来, eid的索引是2

因此可以执行以下更改。

 private void printToConsole(List cellDataList) { for (int i = 0; i < cellDataList.size(); i++) { List cellTempList = (List) cellDataList.get(i); if((HSSFCell) cellTempList.get(2).toString().equals("1")) { for (int j = 0; j < cellTempList.size(); j++) { HSSFCell hssfCell = (HSSFCell) cellTempList.get(j); String stringCellValue = hssfCell.toString(); System.out.print(stringCellValue + "\t"); } } else { i++; } System.out.println(); } }