9
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 中不存在。

4

3 回答 3

11

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

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

只需遍历第一行(标题)中的单元格,检查它们的值,并在找到文本时记下您所在的列!

于 2012-09-26T21:15:56.897 回答
3

这不是你想要的吗?

row.getCell(3) 

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

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

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

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

于 2012-09-26T19:13:31.320 回答
0
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;
     }
于 2016-06-21T09:37:16.793 回答