2015-04-10 5 views
1

Я пишу программу Java для извлечения данных из листа Excel.Читайте только несколько столбцов из листа 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 столбцов только с помощью заголовка. Если это возможно, сообщите мне, как его извлечь.

Я использую POI Apache.

Благодаря

+0

вы имеете в виду вы хотите получать только столбцы, которые соответствуют заголовку столбца, который определен в строке 1? – SMA

+0

Как насчет использования * row.getCell (int cellnum) * способ? – agad

+0

У меня есть 45-47 столбцов, есть ли другой тип, основанный на заголовке столбца, определенном в верхней части, или нам нужно сделать это только с использованием номера столбца ?, так как мои столбцы похожи на AA, AB, AG, AH, AK, AT, AU. и мне нужно получить текст из этих столбцов. – user3872094

ответ

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()); 
     } 
} 
Смежные вопросы