POIライブラリのバージョンアップに伴い改善されるExcel処理

ColdFusion9から追加されたスプレッドシート(Excel)処理では、内部でApache POIと呼ばれるJavaライブラリが使用されています。ColdFusion 11では、POIライブラリのバージョンが新しいバージョンのものへ置き換えられました。

置き換えに伴い、POIライブラリ側で発生していた問題の一部が改善された事を確認しています。こちらで確認した限りの情報ですが、下記に紹介致します。

 

  • 一部の書式でセルの値に「#」が含まれている場合、ファイルの読み込み時にエラーが発生する
  • セルの書式に、「ユーザー定義: m"月"d"日"」が指定されたセルを読み込んだ際エラーが発生する
  • XLS形式のファイルに対してSpreadsheetFormatCellRange関数を使ってスタイルを指定した際、書き出したファイルをExcel2003で開くと「セルの書式が多すぎる」という警告が発生し、途中でスタイルが切れる
    • Excelファイルを開いた時に表示される警告メッセージ
      「セルの書式が多すぎるため、書式を追加できません。」

      ※この問題はSpreadsheetFormatCellRangeで指定した範囲のセルの数だけスタイルがセットされ、XLS形式で指定可能なスタイル数の上限(約4000)を超えてしまった場合に発生する模様です。ColdFusion10でエラーが発生するプログラムをColdFusion11で試したところ、エラーが解消され、出力されたExcelファイルのサイズもColdFusion10に比べて小さくなりました
  • XLSX形式のファイルに対してSpreadsheetFormatCell 関数を使ってスタイルを指定する際に、エラーが発生する
  • セルの結合を含むXLSX形式のファイルに対してセルに値をセットした場合、書き出したファイルをExcelで開くと「読み取れない内容が含まれる」メッセージが発生する
    • Excelファイルを開いた時に表示されるメッセージ
      'xxxxxxx.xlsx' には読み取れない内容が含まれています。このブックの内容を回復しますか?ブックの発行元が信頼できる場合は、[はい]をクリックして下さい。
    • [はい]をクリックした後に表示されるメッセージ
      読み取れなかった内容を修復または削除することにより、ファイルを開くことができました。
      削除されたレコード /xl/worksheets/xxxxxx.xml パーツ内のセルの結合
  • XLS形式のファイルに対してSpreadSheetRead()関数でスプレッドシートオブジェクト化する際にエラーが発生する場合がある
  • あらかじめ画像が埋め込まれているシートに対してSpreadsheetAddImageを実行すると、埋め込まれている画像が消える。
  • 複数回SpreadsheetAddImageを実行してもシートには最後の画像しか表示されない

尚、Excel 2007フォーマット(xlsx)は、これまでバイナリ形式だった Excel 97-2003フォーマット(xls)と異なりXMLをベースとしたファイル形式で構成されています。そのため、ColdFusionでそれらExcel処理を行った際も内部処理は全く異なり(使用されるPOIライブラリも異なり)ます。Excelファイルの内容やデータ量にも依存しますが、xlsx形式はxls形式と比較しても処理が遅く、メモリも多く消費します。POIライブラリの処理に依存する問題のためColdFusion側では対処ができない点に注意して下さい。
(特にメモリや処理時間に考慮が必要な環境の場合はxlsxではなくxlsで処理を行う事をお勧めします。また xlsx形式のファイルを使用される場合は、実際の環境やデータで十分なテストを行った上、その結果によっては、処理内容やxlsxファイルの内容を変更するなど、パフォーマンスに応じた変更(調整)も適宜行って下さい)

上記以外でも、ColdFusion公式ブログ(blogs.coldfusion.com)にColdFusion Splendor で改良・向上した機能に関する情報が掲載されました。こちらの情報も併せてご覧ください。

http://blogs.coldfusion.com/post.cfm/improvements-and-enhancements-in-spreadsheet

 

 


記事公開日:2014年03月07日
最終更新日:2015年05月07日

 

 


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.