そのアドレスから、さらにシート名だけをとりだしたい。 2015/12/29

javaです。
poiでエクセル操作です。
セルにハイパーリンクでドキュメント内にあるリンクをはり、それをpoiを使って取得するのですが、その参照の形式は、シート名!A1という感じのものになります。
これがエクセル内での特殊文字?とか使われると'シート名!!'!A1という感じになります(ここではシート名に!をあえて含めています)。

参照(アドレス)の取得の仕方は、
Cell::getHyperlink()でHyperlinkをとりだして、さらにそこからHyperlink::getAddress()で、文字列表現をとりだします。

そのアドレスから、さらにシート名だけをとりだしたい。
poiのコードをのぞいていますと、
org.apache.poi.ss.util.CellReferenceにあるparseSheetNameでやっているようです。
ちなみにバージョンは、バージョン3.10.1です。
現時点でのコードをみるとTODOがコメントに書いてあって、どうもこの似たような処理を、あちらこちらでやっているようで、それをリファクタリングしたいようです。

簡単にシート名をとりだすためのユーティリティメソッドを書いてみました。


以下、コード

public static String parseSheetName(String reference) { final char QUOTE = '\''; StringBuilder sb = new StringBuilder(); int startPos = 0; if (reference.charAt(0) == QUOTE) { startPos = 1; } for (int i = startPos; i < reference.length(); i++) { char c = reference.charAt(i); if (QUOTE == c) { break; } if (1 != startPos && '!' == c) { break; } sb.append(c); } return sb.toString(); }







: