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

をセルインデックスを取得し、どのように私は私がrow.getCellNumber("PatchNumber");にアクセスしたいテキストセルの値は、Apache POIから

XSSFRow row = (XSSFRow) rows.next();
を使用してPatchNumberので、CellNumberにアクセスします//このメソッドはApache POIには存在しないことに注意してください。

答えて

5

使用することができますcolumns列名のリストを構築するだろう - あなたは言葉が含まれている列を知りたい「パッチを"それは最初の行ですか?もしそうなら、あなたがする必要があるすべてのようなものです:最初の(ヘッダー)行のセルを超える

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)親ブックからRow.MissingCellPolicy有する所与の(0 ベース)インデックスにセルを返し。

「PatchNumber」という名前で正確にアクセスする場合は、ヘッダー行を読み取り、PatchNumberのインデックスを保存できます。テーブルモデルはセルへのアクセスしか定義していないが、列名による関連するアクセスは提供していないと思う。すべての行が同じモデルであると私は考える:-)

カラムのインデックスを取得する。私は、ヘッダー行を反復処理し、その後、あなたが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

@VladimirはそのAPIがApache POIに存在しないと仮定しているため、APIを見つけることができませんでした。 – 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

このメソッドは、検索された文字列のセルアドレスを返します。 –