2014-01-26 2 views
0

Я использую программу для чтения значений из файла excel и затем возвращаю значения чтения. Я попытался использовать итератор, а также цикл for, но программа не возвращает все значения на листе. Пожалуйста, предложите.Чтение значений из файла Excel с использованием Apache POI API

import java.io.FileInputStream; 
import java.util.ArrayList; 
import java.util.Iterator; 
import org.apache.poi.ss.usermodel.Row; 
    import org.apache.poi.ss.usermodel.Cell; 
    import org.apache.poi.ss.usermodel.CellValue; 
    import java.io.File; 

    import org.apache.poi.xssf.usermodel.XSSFSheet; 
    import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

    public class ExcelReading { 

public static STring ReadExcel(String Path){ 
    String FakeReturn = null; 
try 
    { 
     FileInputStream file = new FileInputStream(new File(Path)); 

     XSSFWorkbook workbook = new XSSFWorkbook(file); 

     XSSFSheet sheet = workbook.getSheetAt(0); 

     for(Row row:sheet) 
     { 
      Cell cell=row.getCell(0); 
      Cell testcell = row.getCell(1); 
      if(cell.getStringCellValue()!=null) 
      return testcell.getStringCellValue(); 
      else 
       break; 

     } 
     file.close(); 

    } 
    catch (Exception e) 
    { 
     System.out.println("The code carries an exception"); 
     e.printStackTrace(); 
     return FakeReturn; 
    } 

return FakeReturn; 
} 

}

+3

Вы действительно думаете, этот код будет работать. –

ответ

3

Вы выход, как только вы столкнулись с одной конкретным значением ячейки, следовательно, вы всегда получить один тот же результат все время.

Для исчерпывающего прохождения листа, в то время как итерация по rows, вы должны получить ручку на Iterator ячеек в этой строке. Как только вы получите дескриптор одного экземпляра Cell, сохраните его значение Java Collection, а не только одно значение.

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

while (rowIterator.hasNext()) { 
    Row row = rowIterator.next(); 

    Iterator<Cell> cellIterator = row.cellIterator(); 
    while (cellIterator.hasNext()) { 
     Cell cell = cellIterator.next(); 
      cell.getStringCellValue(); //Do something useful with me 
... 

EDIT: Чтобы получить определенный столбец, используйте CellReference ниже:

XSSFSheet ws = wb.getSheet("Sheet1"); 
CellReference cellReference = new CellReference("A11"); 
XSSFRow row = sheet.getRow(cellReference.getRow()); 
if (row != null) { 
    XSSFCell cell = row.getCell(cellReference.getCol()); 
} 
+0

Есть ли способ, с помощью которого я могу прочитать значения конкретного столбца в электронной таблице? – IntrepidBlue

+0

@ user2911856 взгляните на редактирование, вы можете использовать CellReference для получения дескриптора на конкретном столбце – PopoFibo

+0

Спасибо большое! Это работало как шарм. – IntrepidBlue

Смежные вопросы