Apache POI を使用すると、名前付き範囲を見つけることができます。
XSSFName[] ranges = new XSSFName[workbook.getNumberOfNames()];
for (int i = 0; i < _wb.getNumberOfNames(); i++)
ranges[i] = workbook.getNameAt(i);
これで、AreaReference をセル化できます。
AreaReference area = new AreaReference(ranges[0].getRefersToFormula());
そして最後に、その範囲内のすべてのセルを取得できます。
CellReference[] cells = area.getAllReferencedCells();
それはすべてうまくいきます。Burt 範囲がカバーする領域を再定義する必要があるユースケースがあります。それを行う方法はありますか?range.getRefersToFormula()
メソッドが のような文字列を返すことに気付きましたMySheet!$A$1:$B$8
。はありますがrange.setRefersToFormula(String formula)
、自分で Excel の範囲式パーサーを作成する以外に方法があると信じなければなりません。Cell
よりタイプセーフなものへの参照を設定して AreaReference を生成する方法はありませんか? String
新しい範囲を表すために実際に を生成する必要がありますか? これを支援するAPIがどこかにあると思いますが、見つけられないようです。
アップデート
いくつかの API を見つけましたが、動作していないようです。少なくとも正しく保存されていません。これが私がしたことです。
AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())
数式を正しく設定しているように見えますが、ワークブックをディスクにストリーミングすると、範囲が完全に間違っています。