2016-03-29 6 views
1

apache POIで既存のxlsmファイルを変更したいと考えています。apache POIでのセルの直接アドレッシング

単セルを変更するだけでシート全体をループしたくないのですが、今まで見つかったすべての例は、すべての行とすべてのセルをループして現在の行/ col-indexは変更される行と一致します。

1つのセルを座標で直接取得する「ランダムアクセス」モードはありませんか?有望なgetCell method of the CellUtil classが整数座標の代わりに行オブジェクトを必要とするイベント。

答えて

0

あなたはそれから、Yのシートから最初の行を取得し、次にxにおける細胞を得る:

Row myRow = getRow(int x, sheet); 
Cell myCell = getCell(myRow, int y); 
+0

これは私が現時点でやっている方法です。 Sheetクラスで直接セルを取得します。 – slup

1

Excelファイル形式は、そう未+ unstyled行および(通常は)スパース・ファイル・フォーマットでありますセルは通常ファイルからスキップされます。そのため、行とセルをフェッチするときにnull値をチェックする必要があります。しかし、それ以外に、あなたはかなり直接的に細胞をフェッチすることができます。あなたはPOIスタイル1(例えば行= 2、列= 1)に座標(例えばB3)のエクセル形式のセットをオンにするCellReference classを使用することができ、その後、どのように応じて、

CellReference ref = new CellReference("B3"); 

Workbook workbook = WorkbookFactory.create(new File("input.xls")); 
Sheet sheet = workbook.getSheetAt(0); 

Row r = sheet.getRow(ref.getRow()); 
if (r == null) { 
    // Handle this whole row being empty 
} else { 
    Cell c = r.getCell(ref.getCol(), Row.RETURN_BLANK_AS_NULL); 
    if (c == null) { 
     // Handle this cell being empty 
    } else { 
     // Do something with the cell 
    } 
} 

をフェッチ不足している行やセルを処理したい場合は、それを短くすることができますが、それはニーズに特有のものです