Java 如何使用列名迭代excel工作表中的当前行?

Java 如何使用列名迭代excel工作表中的当前行?,java,excel,apache-poi,xssf,Java,Excel,Apache Poi,Xssf,我需要在excel工作表上进行分析,并从每一行中检索值以将其存储在数据库中。目前,我是根据每个单元格所持有的值的类型来做这件事的。在当前的情况下这是可以的,因为我只需要处理2列。但是我有一个新的需求,需要解析一个包含超过12列的excel工作表。在这种情况下怎么做?如果使用带有表头的结构化表,是否有一种方法可以基于列迭代每一行 我目前的代码如下 File file = new File(UPLOAD_LOCATION + fileUpload.getFile().getOrigi

我需要在excel工作表上进行分析,并从每一行中检索值以将其存储在数据库中。目前,我是根据每个单元格所持有的值的类型来做这件事的。在当前的情况下这是可以的,因为我只需要处理2列。但是我有一个新的需求,需要解析一个包含超过12列的excel工作表。在这种情况下怎么做?如果使用带有表头的结构化表,是否有一种方法可以基于列迭代每一行

我目前的代码如下

        File file = new File(UPLOAD_LOCATION + fileUpload.getFile().getOriginalFilename());
        FileInputStream excelFile = new FileInputStream(file);

        Workbook workbook = new XSSFWorkbook(excelFile);
        Sheet datatypeSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = datatypeSheet.iterator();
        while (iterator.hasNext()) {
            Row currentRow = iterator.next();
            Iterator<Cell> cellIterator = currentRow.iterator();

            while (cellIterator.hasNext()) {

                Cell currentCell = cellIterator.next();
                // getCellTypeEnum shown as deprecated for version 3.15
                // getCellTypeEnum ill be renamed to getCellType starting
                // from version 4.0
                if (currentCell.getCellTypeEnum() == CellType.STRING) {
                    System.out.print(currentCell.getStringCellValue() + "--");
                } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
                    System.out.print(currentCell.getNumericCellValue() + "--");
                }

            }
有没有一种方法可以同样传递列标题的名称

请帮忙

提前感谢。

根据评论

    InputStream excelFile = new FileInputStream(file);
    Workbook workbook = new XSSFWorkbook(excelFile);
    ArrayList colsList=new ArrayList();
    colsList.add("Col1");
    colsList.add("Col2");
    colsList.add("Col3");
    colsList.add("Col4");
    Sheet datatypeSheet = workbook.getSheetAt(0);
    int numOfRows=datatypeSheet.getLastRowNum();
    for(int rowNum=0;rowNum<numOfRows;rowNum++){
    Row row=datatypeSheet.getRow(rowNum);
    int numOfCellPerRow=row.getLastCellNum();
    for(int cellNum=0;cellNum<numOfCellPerRow;cellNum++){
    if(colsList.contains(row.getCell(rowNum).getStringCellValue())){
    Cell cell=row.getCell(cellNum)
    System.out.println("Cell No:"+cellNum+" value is: 
    "+cell.getStringCellValue())
    }
   }
     System.out.println("This is a new Row");
   }
InputStream excelFile=新文件InputStream(文件);
工作簿=新XSSF工作簿(Excel文件);
ArrayList colsList=新的ArrayList();
colsList.添加(“Col1”);
colsList.添加(“Col2”);
colsList.添加(“Col3”);
colsList.添加(“Col4”);
工作表数据类型工作表=工作簿。getSheetAt(0);
int numorrows=datatypeSheet.getLastRowNum();
对于(int rowNum=0;rowNum,基于注释

    InputStream excelFile = new FileInputStream(file);
    Workbook workbook = new XSSFWorkbook(excelFile);
    ArrayList colsList=new ArrayList();
    colsList.add("Col1");
    colsList.add("Col2");
    colsList.add("Col3");
    colsList.add("Col4");
    Sheet datatypeSheet = workbook.getSheetAt(0);
    int numOfRows=datatypeSheet.getLastRowNum();
    for(int rowNum=0;rowNum<numOfRows;rowNum++){
    Row row=datatypeSheet.getRow(rowNum);
    int numOfCellPerRow=row.getLastCellNum();
    for(int cellNum=0;cellNum<numOfCellPerRow;cellNum++){
    if(colsList.contains(row.getCell(rowNum).getStringCellValue())){
    Cell cell=row.getCell(cellNum)
    System.out.println("Cell No:"+cellNum+" value is: 
    "+cell.getStringCellValue())
    }
   }
     System.out.println("This is a new Row");
   }
InputStream excelFile=新文件InputStream(文件);
工作簿=新XSSF工作簿(Excel文件);
ArrayList colsList=新的ArrayList();
colsList.添加(“Col1”);
colsList.添加(“Col2”);
colsList.添加(“Col3”);
colsList.添加(“Col4”);
工作表数据类型工作表=工作簿。getSheetAt(0);
int numorrows=datatypeSheet.getLastRowNum();

对于(int rowNum=0;rowNumDo您需要它作为迭代器吗?正常循环会有问题吗?@basilbatikhi没有问题。有办法吗?当然有办法,而且迭代器肯定有办法,但实际上我不知道如何使用它获取第1行中的值,创建从第1行单元格值到其列号的映射,然后处理ot她的行查找列到第1行的值?您需要它作为迭代器吗?正常循环可能有问题吗?@BasilBattikhi没有问题。有办法这样做吗?当然有办法,而且肯定有迭代器的办法,但实际上我不知道如何使用它获取第1行的值,创建一个从第1行单元格值到其列号的映射s、 然后处理其他行查找列到第1行的值?感谢您的发布,但这实际上不是我想要的。我需要使用列名获取每列中的值。如果有必要,我可以使用结构化引用表。感谢您的发布,但这实际上不是我想要的。我需要获取每列中的值使用列名。如果有必要,我可以使用结构化引用表。