JXlsの実装は、Excelテンプレートに基づいてレポートを生成します
Jxls Implementation Generates Reports Based Excel Template
JXlsの実装は、Excelテンプレートに基づいてレポートを生成します
jxls これは、Excelレポートを生成するための非常に小さなツールライブラリです。 Jxlsは、Excelテンプレートの特定のタグを使用して、出力形式とデータレイアウトを定義します。多くのアプリケーションでは、Excelを生成する必要があるレポート機能があります。
Javaには、Excelファイルを作成できる多くのオープンソースまたは商用ライブラリがあります(APACHE POI、JAVA EXCEL APIなど)。これらのライブラリはある程度非常に低レベルであり、単純なExcelファイルを作成する必要がある場合でも、多くのJavaコードを作成する必要があります。多くの場合、セルごとにフォーマットまたはデータが必要になります。その複雑なレポートレイアウトとフォーマットデータの場合、コードは非常に複雑になり、デバッグと保守が困難になる可能性があります。さらに、すべてのExcel機能がAPI(マクロや画像など)を介してサポートおよび操作されるわけではありません。サポートされていない機能の場合、推奨される解決策は、Excelテンプレートでオブジェクトを手動で作成してから、テンプレートにデータを入力することです。
Jxlsは、このアプローチをより高いレベルに引き上げます。 Jxlsを使用する場合は、Excelテンプレートですべてのレポート形式とデータレイアウトを定義し、Jxlsエンジンを実行して、テンプレートに入力するデータを提供するだけです。ほとんどの場合、適切な構成でJxlsエンジンプログラムを記述して呼び出すだけで済みます。
クイックガイド
以下は、簡単な例で示されています。
pojoを定義する
Excelへの出力に使用されるEmployeeオブジェクトを含むJavaコレクションがあるとします。 Employeeクラスは次のように定義されています。
public class Employee { private String name private Date birthDate private BigDecimal payment private BigDecimal bonus // ... constructors // ... getters/setters }
実装手順は次のとおりです。
- 必要な依存関係を追加します
- 特定のタグを使用してExcelテンプレートファイルを作成します
- jxlsライブラリのAPIを使用してテンプレートを処理し、従業員データを入力します
各ステップについて、以下で詳しく説明します。
依存関係ライブラリを増やす
最も簡単な方法は、mavenまたはgradleを使用することです。 jxlsの2つのモジュールと基礎となる実装を使用する必要があります。
org.jxls jxls 2.4.7
jxlsモジュールのコアモジュールに依存することに加えて、依存関係を追加して、Excelで基盤となるすべてのJava操作を実行するためのjxls変換エンジンの実装を実装する必要もあります。 jxlsコアモジュールは、特定のjava-excleライブラリに依存するのではなく、特定のExcelライブラリに関連しない一連のインターフェイスに依存します。現在、jxlsは、APACHE POI、JAVA EXCELAPIの2つの実装をサポートしています。
poi変換に基づいて、次の依存関係モジュールを使用する必要があります。
org.jxls jxls-poi 1.0.16
Java Excel API変換を使用するには、対応する依存関係モジュールが必要です。
org.jxls jxls-jexcel 1.0.7
もちろん、特定のpoiライブラリまたはjexcelライブラリも導入する必要があります。
Excelテンプレートを作成する
テンプレートは、特定のタグを使用してデータを出力する方法を指定するExcelファイルです。 Jxlsは、Excelテンプレートを解析し、制御命令を抽出するための組み込みのタグハンドラーを提供します。必要に応じて、カスタマイズ可能なタグを使用することもできます。
デフォルトでは、jxlsはApache jexl式を使用して、テンプレート内のオブジェクトのプロパティとメソッドを参照します。オブジェクトは、従業員名を出力する必要があるなど、jxlsのコンテキストでキーに関連付ける必要があります。use${employee.name}
。式の最も基本的な構文は、${
with }
を使用することです。コンテキスト内に、employeeをキーとして使用するオブジェクトがあるとします。
サンプルのExcelテンプレートファイルは次のとおりです。
上記のテンプレートは4行用です。 A1セルのコメントの内容は次のとおりです。jx:area(lastCell='D4')
これは、テンプレートのルート領域をA1:A4
として定義します。 Eachコマンドは、employeesコレクションを反復処理し、各コレクション要素の値を設定するために使用されます(タグのvar属性の値と一致します)。各コマンドの本体領域はA4:D4
(lastCellプロパティ定義を使用)であり、この領域はコンテキスト内の各Employeeオブジェクトでコピーおよび処理されます。
この例では、XlsCommentAreaBuilderクラスを使用して、テンプレートにJxls領域を構築します。このクラスを使用して、テンプレート注釈付きの領域を定義します。 Javaコードに同じ機能を実装する場合は、テンプレートから注釈を削除する必要があります。
JxlsAPI処理Excelテンプレート
JxlsAPIを使用してExcelテンプレートを処理する方法を見てみましょう。コードは単純です:
... logger.info('Running Object Collection demo') List employees = generateSampleEmployeeData() try(InputStream is = ObjectCollectionDemo.class.getResourceAsStream('object_collection_template.xls')) { try (OutputStream os = new FileOutputStream('target/object_collection_output.xls')) { Context context = new Context() context.putVar('employees', employees) JxlsHelper.getInstance().processTemplate(is, os, context) } } ...
最初にクラスパスパスからobject_collection_template.xlsxテンプレートファイルをロードし、次に出力レポートファイルtarget /object_collection_output.xlsxを定義します。実際には1行のコードのみを処理します。
JxlsHelper.getInstance().processTemplate(is, os, context)
JxlsHelperクラスは、デフォルトでデータオーバーレイテンプレートシートを使用することを前提としています。また、別のシートにデータを生成することを選択します。
JxlsHelper.getInstance().processTemplateAtCell(is, os, context, 'Result!A1')
出力領域は、結果シートのセルA1から始まります。
最終的なレポート出力は次のとおりです。
総括する
この記事では、Excelテンプレートに基づいてレポートを簡単に生成できるJxlsライブラリを紹介します。その他の機能の読者は、公式Webサイトのドキュメントを表示できます。