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 }

実装手順は次のとおりです。

  1. 必要な依存関係を追加します
  2. 特定のタグを使用してExcelテンプレートファイルを作成します
  3. 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サイトのドキュメントを表示できます。