从excel表中只读几列

时间:2015-04-10 11:07:11

标签: 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;
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列中获取数据,如果有,请告诉我如何提取它。

我正在使用Apache POI。

由于

1 个答案:

答案 0 :(得分:0)

    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());   
        }
 }