2012-09-26 101 views
5
Environment Status Version PatchNumber 
Windows  Live  1.0  2 
Unix   Live  2.0  4 
Mac   Live  1.3  8 

如果我在一個excel上面顯示的數據,我怎麼使用文本訪問PatchNumber的cellNumber獲取細胞指數,Apache的POI

XSSFRow row = (XSSFRow) rows.next();
我想訪問row.getCellNumber("PatchNumber"); //注意,這個方法在Apache POI中不存在。

回答

5

我想我明白你在做什麼之後 - 你想知道這列包含單詞「補丁「在第一排?如果是這樣,你需要做的是一樣的東西:

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

只是循環在第一行(標題)在細胞內,檢查他們的價值,並記下你的列時,你發現你的文字!

+0

我也在我的代碼中使用了相同的技術,只是想知道是否有由Apache POI提供的API來執行相同的操作。感謝您的輸入。 – SDS

+0

沒有。每個人在工作表中查找內容的要求都會有所不同,第一行沒有特別之處,所以沒有什麼一般性的東西可以適用於所有人。最好的選擇是自己編寫幾行代碼,以滿足您的特定需求! – Gagravarr

2

這不是你想要的嗎?

row.getCell(3) 

公共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

+0

getcell(int x)是要返回單元格。我想要cellNumber,在我的情況下patchNumber現在位於第4列,明天它可能會移動到第5或第3列,所以想知道我是否可以通過列文本獲取列的索引。 – SDS

+0

這顯然不可能。該行不知道標題行。你是否試圖讀取標題行? – Vladimir

+0

我找不到任何API,現在,因爲@Vladimir說它不可能我假設這樣的API不存在於Apache POI中。 – SDS

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; 
    } 
+2

此方法將返回搜索字符串的單元格地址。 –