0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ColdFusionのExcel出力事情などをメモ

Last updated at Posted at 2022-01-14

これまでの認識

(以下、ColdFusion2018での動作となり、最新版では異なるかもしれません)

ColdFusionにはcfspreadsheetタグなどでExcelの読み書きをする機能が実装されていますが、
処理が遅かったり、メモリを大量消費するなどを理由に、利用を見送った方もいると思います。

これは、Apache POIを利用しているのが理由です。

ColdFusionのExcel読み書きが遅いこともあり、POIを使って自前実装する方もいたと思います。
恐らくColdFusionではorg.apache.poi.xssf.usermodel.XSSFWorkbookクラスを利用していることが処理が重い原因だと思います。
(POIが重い理由などがあまりよくわからない方は、適当にググってみてください)

なので、org.apache.poi.xssf.streaming.SXSSFWorkbookクラスを使って速度改善を試みた方もいるのではないでしょうか?

最新のColdFusion2021ではPOIを使っていないかも?(認識が間違っていたので削除)

先日、最新のColdFusion2021をちょっとだけ触ってみたのですが、
org.apache.poi.xssf.streaming.SXSSFWorkbookを使ってみたらこんなエラーメッセージが表示されました。
image.png
クラスが見つからない・・・

ちなみに、org.apache.poi.xssf.usermodel.XSSFWorkbookでも同様でした。

Dockerを使って環境を構築しているので、/opt/coldfusion/cfusion/libにjarファイルなどがあるのですが、ここにPOI関連のファイルが無いようです。
(ColdFusion2018では、ここにPOI関連のjarファイルがありました)

POIを置いてないなどの理由なのか、ColdFusion2021のDockerイメージは2018のDockerイメージと比べてサイズが半分くらいになっているようです。
(2018が992MB、2021が412MB)

もしかして、ColdFusion2021ではPOIを使わずにExcel出力が実装されているのでは・・・
もしそうなら、パフォーマンスが大幅に改善されているのでは・・・

いつか試したいのですが、現時点でColdFusion2021を使う開発案件はないので、
一旦ColdFusion2021の調査はここまで・・・

追記

コメントで情報をいただきました。ありがとうございます。
ColdFusion2021からパッケージマネージャーなるものが導入されたようです。
これを利用してPOIを追加する、と言った感じになりそうです。
(そのうち時間を作ってまた試してみます)

公式の日本語ドキュメントが少なくなってきたColdFusionですが、2022年もドキュメントを更新しているので、まだまだやる気はあるみたいですね。

おまけ:ColdFusion2018でSXSSFWorkbookを使う

ColdFusion2018ではPOIが使われているので、org.apache.poi.xssf.streaming.SXSSFWorkbookも使えるのですが、なぜかシート作成に失敗するようです(自分だけ?)。

// パフォーマンス改善のためSXSSFWorkbookを利用
var workbook = createObject("java", "org.apache.poi.xssf.streaming.SXSSFWorkbook");

// この処理が失敗する(XSSFWorkbookだと問題なく動くけど・・・)
var sheet = workbook.createSheet();

この場合、Dockerfileをこんな感じにするとorg.apache.poi.xssf.streaming.SXSSFWorkbookでも動きました。
(libfreetype6-devは環境に合わせてそれらしく・・・)

Dockerfile
FROM adobecoldfusion/coldfusion2018

RUN apt-get update -y
RUN apt-get install fontconfig libfreetype6-dev -y

あとはPOIのドキュメントとにらめっこしながらJavaっぽいコードを書けば、だいぶパフォーマンスは改善されるはずです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?