如何使用java apache poi从xlsx文件的特定单元格中获取值

我正在写一个Java程序来读取一个Excel表(xlsx)使用Apache poi。 我可以遍历所有的单元格,并获得所有的值。 但我不能得到一个具体的细胞价值,说E10。 有没有办法find这个?

请参阅我用于遍历所有单元格的代码。

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

例如,要获得第一张工作表的E10:

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

注意:因为索引是基于空值的,所以减一。

您也可以使用这种方便的方法将E映射到4。

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

XSSFSheet有方法getRow(int rownum)它返回逻辑行(从0开始)。 如果你要求一个没有定义的行,你会得到一个空值。 这就是说,第4行代表了表单上的第五行。

一旦获得该行,就可以调用XSSFRow对象的getCell(int cellnum)方法。 它返回给定(基于0)索引的单元格。

要从Excel中的特定单元格获取值,可以使用下面的代码行。

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