如何使用ApachePOI读取Java中与特定列单元对应的行?

如何使用ApachePOI读取Java中与特定列单元对应的行?,java,excel,list,arraylist,apache-poi,Java,Excel,List,Arraylist,Apache Poi,我正在使用ApachePOI库读取Java中的Excel文件。我用测试数据创建了一个虚拟employees表。我只想读取这些行,并将它们存储在一个列表中,该列表的第3列或“AlternateEnumber”有一个值(不是null)。因此,对于具有“AlternateEnumber”的员工,我希望读取他们对应的行,并将所有单元格数据存储在列表中。 问题是我打印了excel中的所有单元格 请帮忙。谢谢 package com.testcases; import java.io.FileInput

我正在使用ApachePOI库读取Java中的Excel文件。我用测试数据创建了一个虚拟employees表。我只想读取这些行,并将它们存储在一个列表中,该列表的第3列或“AlternateEnumber”有一个值(不是null)。因此,对于具有“AlternateEnumber”的员工,我希望读取他们对应的行,并将所有单元格数据存储在列表中。 问题是我打印了excel中的所有单元格

请帮忙。谢谢

package com.testcases;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelColumn {

    public static void main(String[] args) throws IOException {
//      
        DataFormatter df = new DataFormatter();
        FileInputStream fis = new FileInputStream("D:\\TestFiles\\testdata.xlsx");
        XSSFWorkbook wb = new XSSFWorkbook(fis);
        XSSFSheet sheet = wb.getSheetAt(0);
        List<String> nameList = new ArrayList<String>();
        List<String> ecodeList = new ArrayList<String>();
        List<String> mobileNumberList = new ArrayList<String>();
        List<String> alternateNumberList = new ArrayList<String>();

        String columnWanted = "AlternateNumber";
        Integer columnNo = null;
        Row firstRow = sheet.getRow(0);

        for (Cell cell : firstRow) {
            if (cell.getStringCellValue().equals(columnWanted)) {
                columnNo = cell.getColumnIndex();
            }
        }

        if (columnNo != null) {
            for (Row row : sheet) {
                Cell c = row.getCell(columnNo);
                if (c != null) {
                    Row corrRow = c.getRow();
                    Cell rowCell0 = corrRow.getCell(0);
                    Cell rowCell1 = corrRow.getCell(1);
                    Cell rowCell2 = corrRow.getCell(2);

                    nameList.add(df.formatCellValue(rowCell0));
                    ecodeList.add(df.formatCellValue(rowCell1));
                    mobileNumberList.add(df.formatCellValue(rowCell2));
                    alternateNumberList.add(df.formatCellValue(c));

                }
            }
        }

        System.out.println(nameList);
        System.out.println(ecodeList);
        System.out.println(mobileNumberList);
        System.out.println(alternateNumberList);

    }
}
package com.testcases;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.DataFormatter;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
公共类ReadExcelColumn{
公共静态void main(字符串[]args)引发IOException{
//      
DataFormatter df=新的DataFormatter();
FileInputStream fis=新的FileInputStream(“D:\\TestFiles\\testdata.xlsx”);
XSSF工作簿wb=新XSSF工作簿(fis);
XSSFSheet-sheet=wb.getSheetAt(0);
列表名称列表=新的ArrayList();
List ecodeList=new ArrayList();
List mobileNumberList=new ArrayList();
List alternateNumberList=new ArrayList();
String columnWanted=“AlternateNumber”;
整数columnNo=null;
Row firstRow=sheet.getRow(0);
用于(单元格:第一行){
if(cell.getStringCellValue().equals(columnWanted)){
columnNo=cell.getColumnIndex();
}
}
if(columnNo!=null){
用于(行:页){
单元格c=行。获取单元格(列号);
如果(c!=null){
Row corrRow=c.getRow();
单元格rowCell0=corrRow.getCell(0);
单元格rowCell1=corrRow.getCell(1);
单元格rowCell2=corrRow.getCell(2);
nameList.add(df.formatCellValue(rowCell0));
ecodeList.add(df.formatCellValue(rowCell1));
mobileNumberList.add(df.formatCellValue(rowCell2));
alternateNumberList.add(df.formatCellValue(c));
}
}
}
System.out.println(名称列表);
System.out.println(生态目录);
System.out.println(mobileNumberList);
System.out.println(alternateNumberList);
}
}

看起来你大部分时间都在那里。。。创建一个包含4个字段的
Person
类并返回它们,或者只做一个映射列表并将4个值填充到一个映射中,每个匹配行一个映射