从单元格值Apache POI获取单元格索引

Environment Status Version PatchNumber Windows Live 1.0 2 Unix Live 2.0 4 Mac Live 1.3 8 

如果我在Excel中显示上述数据,如何使用文本访问PatchNumber的cellNumber

XSSFRow row = (XSSFRow) rows.next();
我想访问row.getCellNumber("PatchNumber"); //注意这个方法在Apache POI中不存在。

我想我明白你在做什么 – 你想知道哪一列包含“补丁”在第一行? 如果是这样,你需要做的就是:

 Sheet s = wb.getSheetAt(0); Row r = s.getRow(0); int patchColumn = -1; for (int cn=0; cn<r.getLastCellNum(); cn++) { Cell c = r.getCell(cn); if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) { // Can't be this cell - it's empty continue; } if (c.getCellType() == Cell.CELL_TYPE_STRING) { String text = c.getStringCellValue(); if ("Patch".equals(text)) { patchColumn = cn; break; } } } if (patchColumn == -1) { throw new Exception("None of the cells in the first row were Patch"); } 

只需循环第一行(表头行)中的单元格,检查它们的值,并记下find文本时所在的列。

这不是你想要的吗?

 row.getCell(3) 

public XSSFCell getCell(int cellnum)返回给定(基于0)的索引处的单元格,以及来自父级Workbook的Row.MissingCellPolicy。

如果您想要完全按名称访问 – “PatchNumber”,则可以读取标题行并保存PatchNumber的索引。 我认为表模型只定义了对单元格的访问权限,但不提供列名称的​​关联访问权限。 所有的行都是相同的模型,我认为:-)

获取列索引。 我将遍历标题行并build立一个列名列的列表,然后你可以使用columns.indexOf("PatchNumber")

http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html#getCell(int

 public CellAddress searchStringInXslx(String string) throws IOException{ FileInputStream inputStream = new FileInputStream("Books.xlsx"); Workbook workbook = new XSSFWorkbook(inputStream); Sheet firstSheet = workbook.getSheetAt(0); Iterator<Row> iterator = firstSheet.iterator(); CellAddress columnNumber=null; while(iterator.hasNext()){ Row nextRow = iterator.next(); Iterator<Cell> cellIterator = nextRow.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); if(cell.getCellType()==Cell.CELL_TYPE_STRING){ String text = cell.getStringCellValue(); if (string.equals(text)) { columnNumber=cell.getAddress(); break; } } } } workbook.close(); return columnNumber; }