きっかけは、Embulkで新しくExcelファイルを読もうと思ったら、プラグインが固まった(ように見えた)こと。
(超どうでもいいが、「きっかけは」って書くと、LINDBERGのLITTLE WINGが頭の中で始まるw)
トレースログを埋め込んで(自分で作ったプラグインだから、何とでもなるw)見てみたら、セルの数式の計算でやたらと時間がかかっている。1セル7分。おいおい(汗)
SUMIFのような関数で列全体とかが指定されていると、1行目~1,048,576行目までの全てを探しに行く実装になっているようだorz 関数がネストしているような“神エクセル”だと、そりゃ遅いわ…。
(POIでは実データの有る最大行数は取れるんだから、それを考慮してくれればいいのに(苦笑))
まぁPOIの実装は置いといて、Excelでファイルを開いたときは値が表示されているので、これが取れればいいのになぁと思って試しにPOIで値を取得するメソッドを呼んでみたら、取れたし!
後はその値がどの型(数値か文字列か)が分かる方法があれば…と思ってCellクラスを眺めてみたら、ばっちりgetCachedFormulaResultTypeというメソッドがあった!これは知らなかった。。
計算の結果がキャッシュされていないExcelファイルではどうしようもないだろうけど、とりあえず今回の目的にはこれでOK。
という訳で、embulk-parser-poi_excelプラグインに、キャッシュされている値を取得できるようにするオプションを追加した。
ついでに、シート名の指定でワイルドカードを使えるように修正。