Java 从excel工作表中只读取几列

Java 从excel工作表中只读取几列,java,excel,Java,Excel,我正在编写一个Java程序,从Excel工作表中获取数据 通过下面的程序,我可以检索到整个数据 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import org.apache.poi.ss.formula.functions.Column; import org.apache.poi.ss.usermodel.Cell; i

我正在编写一个Java程序,从Excel工作表中获取数据

通过下面的程序,我可以检索到整个数据

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.ss.formula.functions.Column;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadData {

    @SuppressWarnings({ "resource", "null" })
    public static void main(String[] args) throws IOException {

        // get file
        FileInputStream fin = new FileInputStream(
                new File("C:\\A2015.xlsx"));

        // create book holding object
        XSSFWorkbook wb = new XSSFWorkbook(fin);

        // get sheet

        XSSFSheet sheet = wb.getSheetAt(0);

        // iterate through rows

        Iterator<Row> rowIt = sheet.rowIterator();

        while (rowIt.hasNext()) {
            XSSFRow row = (XSSFRow) rowIt.next();

            // iterate through Columns

            Iterator<Cell> colIt = row.cellIterator();
            while (colIt.hasNext()) {
                Cell cell = colIt.next();
                System.out.println(cell.toString());
            }
            System.out.println();

        }

    }
}
但我的情况是,有将近45-47列,其中有一些数据不是我需要的,而是其他团队需要的。每一列都有一个标题,在这45-47列中,我只想从12列中提取数据,在Excel工作表的其余列之间随机放置数据

我的问题是,是否有一种方法可以遍历所有行并仅使用标题从这12列中获取数据,如果有,请告诉我如何提取它

我正在使用ApachePOI


谢谢

您的意思是只获取与第1行定义的列标题相匹配的列吗?使用row.getCellint cellnum方法如何?这里有45-47列,是基于顶部定义的列标题的另一种类型,还是只需要使用列编号?因为我的列类似于AA、AB、AG、AH、AK、at,欧。我需要从这些列中检索文本为什么不迭代一次列名,存储所需列的索引,然后迭代行,从这些索引处的单元格获取值?
    public static short getCellNum(String cellCode)throws InvalidNameException{
       char[] cellCodeU = cellCode.toUpperCase().toCharArray();
       int length = cellCodeU.length;
       int cellNumber = 0;
       for (int j=0;j<length;j++){
          if (cellCodeU[j]<'A' || cellCodeU[j]>'Z')
            throw new InvalidNameException("Wrong column index: " + cellCode);
          cellNumber = cellNumber*CELL_NUMBER_IN_SHEET + (cellCodeU[j]-64);
       }
       cellNumber-=1;
       if (cellNumber<0) 
          throw new InvalidNameException("Wrong column index: " + cellCode);
       return (short)cellNumber;
    }


 String columnsToRead = new String[]{"AA", "AB", "AU"};

 while (rowIt.hasNext()) {
        XSSFRow row = (XSSFRow) rowIt.next();
        for (int a = 0; a < columnsToRead.length; a++){
            Cell cell = getCell(getCellNum(columnsToRead[a]));
            System.out.println(cell.toString());   
        }
 }