2016-03-14 37 views
4

我正在寫一個java程序來讀取使用apache poi的excel表單(xlsx)。我可以遍歷所有單元格並獲取所有值。但我無法獲得特定的單元值,比如說E10。 有什麼方法可以找到它?如何從一個特定的單元格使用java apache的xlsx文件獲取值poi

請參閱我用於遍歷所有單元格的代碼。

package application; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Iterator; 

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

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

public class ReadFromXLSX { 
    public static void readXLSXFile() throws IOException 
    { 
     InputStream ExcelFileToRead = new FileInputStream("C:\\Test.xlsx"); 
     XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead); 
     XSSFWorkbook test = new XSSFWorkbook(); 
     XSSFSheet sheet = wb.getSheetAt(0); 
     XSSFRow row; 
     XSSFCell cell; 
     Iterator rows = sheet.rowIterator(); 
     while (rows.hasNext()) 
     { 
      row=(XSSFRow) rows.next(); 
      Iterator cells = row.cellIterator(); 
      while (cells.hasNext()) 
      { 
       cell=(XSSFCell) cells.next(); 
       if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) 
       { 
        System.out.print(cell.getStringCellValue()+" "); 
       } 
       else if(cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) 
       { 
        System.out.print(cell.getNumericCellValue()+" "); 
       } 
       else 
       { 
       } 
      } 
      System.out.println(); 
     } 
    } 
} 

回答

12

例如,爲了獲得E10的第一個工作表中:

wb.getSheetAt(0).getRow(9).getCell(4); 

注:減去一個,因爲指數是空爲主。

還可以使用此方法的便利至E映射到4

wb.getSheetAt(0).getRow(9).getCell(CellReference.convertColStringToIndex("E")); 
2

XSSFSheet具有方法的getRow(INT ROWNUM) 它返回邏輯行(從0開始)。如果你問一個沒有定義的行,你會得到一個空值。這就是說第4行代表了一張紙上的第五行。

一旦獲得該行,就可以調用XSSFRow對象的getCell(int cellnum)方法。它返回給定(基於0)索引處的單元格。

0

要從excel中的特定單元格獲取值,可以使用下面的代碼行。

wb.getSheetAt(0).getRow(1).getCell(1); 
0

只是版本升級的getCell方法

public XSSFCell getCell(string cellName){ 
    Pattern r = Pattern.compile("^([A-Z]+)([0-9]+)$"); 
    Matcher m = r.matcher(cellName); 
    if(m.matches()) { 
     columnName = m.group(1); 
     rowNumber = Integer.parseInt(m.group(2)); 
     if(rowNumber > 0) { 
      return wb.getSheetAt(0).getRow(rowNumber-1).getCell(CellReference.convertColStringToIndex(columnName)) 
     } 
    } 
    // throw an exception or return a null 
} 

現在,你可以通過這條線很容易獲得的細胞

getCell("E10") 
相關問題