3月26日、Apache POIライブラリの新しいリリース-バージョン3.8がリリースされました。
Apache POIは、Microsoft Officeドキュメントを読み書きするためのJavaライブラリです。
Excel、PowerPoint、Wordなど。 POIを使用すると、プログラムでPOIを作成できます。
または既存のドキュメントの変更、テキストのインデックス作成、ネストされたプロセス
(埋め込み)オブジェクト(ドキュメント、写真など)など。
Apache POIの以前の安定バージョンは、1年半前の2010年10月にリリースされました。
したがって、変更は適切に蓄積されています。 200を超えるバグが修正され、多数のバグが追加されました
新機能と全体的なパフォーマンスの向上。
POI 3.8の新機能
大きな.xlsxファイルを作成するためのSXSSF Spreadsheet APIの実装
(> 100Kエントリ)、メモリが制限されています。
.xlsxファイルジェネレーター(XSSF)の標準実装は、メモリ内のドキュメント全体のモデルを構築し、
つまり メモリー内の各レコード(行)とセル(セル)には、modelkaがあります。 .xlsx形式はベースであるため
XMLでは、各モデルの背後にXML Beanがあり、かなり広範な構造が取得されます
大量のデータを生成すると、OutOfMemoryErrorが発生する可能性があります。
SXSSFは、それぞれの最後のNエントリのみを保存することにより、この問題を解決します
ワークシート、および残りは、蓄積されると、一時ファイルに保存され、保存されるときに
これらの一時ファイルの内容は、メイン文書にコピーされます。
小さな例:-Xmx128Mスイッチで開始すると、以下のコードはおおよそOutOfMemoryErrorでクラッシュします
200,000個のセルを生成した後:
Workbook workbook = new XSSFWorkbook();
同じですが、SXSSFを使用しても、-Xmx64Mスイッチを使用しても問題なく機能します。
Formula Evaluatorの更新
新機能のサポート:
IRR,NPV,MROUND,VAR,VARP,CLEAN,CHAR,ADDRESS,HOUR,MINUTE,SECOND,RATE,WORKDAY,NETWORKDAYS,SUMIFS,RANK
合計で、POIはExcel 2010でサポートされている約300の機能のうち140の機能をサポートしています。
サポートされている機能の完全なリストは
こちらにあります。ユーザー定義関数
数式にサポートされていない関数が含まれている場合はどうなりますか?
デフォルトでは、式計算機はNotImplementedExceptionをスローします。これは次の2つの場合に発生します。
- Excelで定義されているが、POIには実装されていない関数
- VBAマクロまたは外部アドインライブラリで定義された関数
POI 3.8は、必要な機能をプログラムで実装する機能を提供します
計算機に登録します。 このようなもの:
FreeRefFunction CUBEMEMBER = new FreeRefFunction() { public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { if(args.length != 3) {
Antの拡張機能は、Javaコードを記述せずに式を再計算および検証するように設計されています。
この機能には興味深い話があります。Excelファイルを使用する科学プロジェクトから来ました
POIではなく、サードパーティソフトウェアによって作成されます。 ファイルにはデータ自体と式の両方が含まれており、必要です
検証者はプログラマーではありませんが、サーバー側でそれらの正当性を確認してください
Javaで、わずかなAnt構文のみを知っています。
Excel Antタスクを使用して、タスクはビルドファイルを作成します。 相互作用するターゲット
POIでは次のようになります。
<target name="Habratest"> <excelant fileName="habratest.xls"> <test > <evaluate cell="'Habratest'!$B$4" expectedValue="790.7936" precision="1.0e-4" /> </test> </excelant> </target>
Ant出力では、次のように表示されます。
Habratest: [excelant] Using input file: habratest.xls [test] setting globalPrecision to 0.0010 in the evaluator [evaluate] test precision = 1.0E-4 global precision = 0.0010 [evaluate] Using evaluate precision of 1.0E-4 over the global precision of 0.0010 [excelant] 1/1 tests passed.
XSLF -.pptxファイルを操作するためのJava API(PowerPoint 2007-2010)
POIは、.pptxファイルを操作するための完全に機能するユーザーAPIをサポートするようになりました。
プログラムで新しい.pptxファイルを作成したり、既存の.pptxファイルを編集したりできます。
スライド、テキスト、写真、表などを挿入または変更します。
以下は、サポートされている機能の不完全なリストです。
- 新しいスライドの作成、含む。 定義済みのデザイン(タイトル、タイトル、テキスト、
タイトルと写真など) - 写真を挿入
- 段落と書式設定ブロックをサポートするテキストブロックを挿入する
- 複数のプレゼンテーションのスライドを結合する
- テーブル
- PowerPointで定義された幾何学的オブジェクトの完全サポート:
プリミティブ(長方形、楕円)から任意のジオメトリ(フリーフォーム)のオブジェクトまで - PPTX2PNG:スライドを写真に変換する
最後の機能であるPPTX2PNGに注目したいと思います。Javaメイン()インターフェースを備えたこのユーティリティ
スライドをPNG画像に変換しますが、このコードを基礎として、コンバーターを作成できます
他のグラフィック形式(SVG、Flash、HTML5 Canvasなど)に。 転送するだけです
java.awt.Graphics2Dからslide.drawメソッド(Graphics2Dグラフィックス)へのサブクラス。
たとえば、
この例は、
Apache Batikの SVGGraphics2Dドライバーを使用して、.pptxスライドをSVGに変換する方法を示しています。
MS Word .docからHTML、XSL-FO、およびテキストコンバーター
この機能はすでにHabréで
言及されているため、メインのみに注目します。
- Word-to-HTMLコンバーター。写真を使用しても、Word文書をHTMLに変換します。
- 過去のWordExtractorに代わるWord-to-Text Converterが正しく処理されます
ネストされたOLEドキュメント、段落、フィールドコード(ハイパーリンクを含む); - WordドキュメントをXSL FOファイルに変換するWord-to-FOコンバーターも、画像で使用できます。
さらに、このファイルは、WordをPDFに変換するためにApache FOPで処理するために転送できます。
バグ修正、バグ修正、さらに多くのバグ修正....
図書館全体の安定性を向上させるために
多大な作業が行われた
-以前のバージョン3.7からの250以上の変更。 これは主にドキュメントの読みやすさに関連しています。
「POIがファイルを読み取らず、例外でクラッシュする」などのバグレポートはまれであり、すぐに完全に消えることを期待しています
バグを発見したか、プロジェクトの改善方法に関するアイデアを共有したいですか?
http://poi.apache.org/にアクセスして、メーリングリストを購読し、送信してください。
Bugzilへのパッチ。 いつでも大歓迎です!