1. 序章

Apache POI は、ソフトウェア開発者がMicrosoftOfficeドキュメントを作成および操作するためのオープンソースライブラリです。 他の機能の中でも、開発者はプログラムでドキュメントのフォーマットを変更できます。

この記事では、CellStyleというクラスを使用するときにMicrosoftExcelでセルのスタイルを変更する方法について説明します。 つまり、このクラスを使用して、MicrosoftExcelドキュメントのセルのスタイルを変更するコードを記述できます。 まず、これはApache POIライブラリによって提供される機能であり、複数の書式設定プロパティを持つスタイルをブック内に作成できるようにします。 次に、スタイルをそのワークブックの複数のセルに適用できます。

さらに、CellStyleクラスを使用する際の一般的な落とし穴についても説明します。

2. ApachePOIとMavenの依存関係

プロジェクトpom.xmlファイルへの依存関係としてApachePOIを追加しましょう。

<dependency>
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>5.2.0</version> 
</dependency>

3. CellStyleの作成

CellStyleのインスタンス化から始めましょう。

Workbook workbook = new XSSFWorkbook(fileLocation);
CellStyle cellStyle = wb.createCellStyle();

次に、必要なフォーマットプロパティを適切に設定します。 たとえば、次のコードは日付形式に設定します。

cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("m/d/yy h:mm"));

最も重要なことは、 CellStyle の複数のフォーマットプロパティを設定して、目的のスタイルの組み合わせを取得できることです。 たとえば、同じCellStyleオブジェクトに以下のコードを適用しています。 したがって、日付形式のスタイルと中央揃えのテキストスタイルがあります。

cellStyle.setAlignment(HorizontalAlignment.CENTER);

CellStyleには、変更可能ないくつかのフォーマットプロパティがあることに注意してください

財産 説明
DataFormat 日付などのセルのデータ形式
アラインメント セルの水平方向の配置のタイプ
隠れた セルを非表示にするかどうか
インデント セル内のテキストをインデントするスペースの数
BorderBottom

BorderLeft

BorderRight

BorderTop

セルの下、左、右、および上の境界線に使用する境界線のタイプ
フォント フォントの色など、このスタイルのフォントプロパティ

Font プロパティを使用してフォントスタイルを変更するときに、このプロパティをもう一度確認します。

4. CellStyleを使用してフォントをフォーマットする

CellStyleFontプロパティは、フォント関連のフォーマットを設定する場所です。 たとえば、フォント名、色、サイズを設定できます。 フォントを太字にするか斜体にするかを設定できます。 Font の両方のプロパティは、trueまたはfalseのいずれかになります。  下線スタイルを次のように設定することもできます。

価値 財産
U_NONE 下線なしのテキスト
U_SINGLE 単語のみに下線が引かれている単一の下線テキスト
U_SINGLE_ACCOUNTING セル幅のほぼ全体に下線が引かれている単一の下線テキスト
U_DOUBLE 単語のみに下線が引かれている二重下線テキスト
U_DOUBLE_ACCOUNTING セル幅のほぼ全体に下線が引かれている二重下線テキスト

前の例から続けましょう。 警告テキストのスタイルを作成するメソッドを使用して、CellStylerというクラスを作成します。

public class CellStyler {
    public CellStyle createWarningColor(Workbook workbook) {
        CellStyle style = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setFontName("Courier New");
        font.setBold(true);
        font.setUnderline(Font.U_SINGLE);
        font.setColor(HSSFColorPredefined.DARK_RED.getIndex());
        style.setFont(font);

        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        return style;
    }
}

それでは、Apache POIワークブックを作成して、最初のワークシートを入手しましょう。

Workbook workbook = new XSSFWorkbook(fileLocation);
Sheet sheet = workbook.getSheetAt(0);

テキストの配置の効果を確認できるように、行の高さを設定していることに注意してください

Row row1 = sheet.createRow(0);
row1.setHeightInPoints((short) 40);

クラスをインスタンス化し、それを使用してスタイルを設定しましょう

CellStyler styler = new CellStyler();
CellStyle style = styler.createWarningColor(workbook);

Cell cell1 = row1.createCell(0);
cell1.setCellStyle(style);
cell1.setCellValue("Hello");

Cell cell2 = row1.createCell(1);
cell2.setCellStyle(style);
cell2.setCellValue("world!");

次に、このブックをファイルに保存し、Microsoft Excelでファイルを開いて、フォントのスタイル設定の効果を確認します。次のように表示されます。

5. 一般的な落とし穴

CellStyleを使用するときによくある2つの間違いを見てみましょう。

5.1. 誤ってすべてのセルスタイルを変更する

まず、セルから CellStyle を取得して、変更を開始するのはよくある間違いです。 getCellStyleメソッドのApachePOIドキュメントには、セルのgetCellStyleメソッドは常にnull以外の値を返すと記載されています。 これは、セルにデフォルト値があることを意味します。これは、ブック内のすべてのセルで最初に使用されているデフォルトのスタイルでもあります。 したがって、以下のコードはすべてのセルを日付形式にします。

cell.setCellValue(rdf.getEffectiveDate());
cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy"));

5.2. セルごとに新しいスタイルを作成する

もう1つのよくある間違いは、ブックに類似したスタイルが多すぎることです。

CellStyle style1 = codeToCreateCellStyle();
Cell cell1 = row1.createCell(0);
cell1.setCellStyle(style1);

CellStyle style2 = codeToCreateCellStyle();
Cell cell2 = row1.createCell(1);
cell2.setCellStyle(style2);

CellStyleのスコープはワークブックです。 このため、同様のスタイルを複数のセルで共有する必要があります。 上記の例では、スタイルを1回だけ作成し、cell1cell2の間で共有する必要があります。

CellStyle style1 = codeToCreateCellStyle();
Cell cell1 = row1.createCell(0);
cell1.setCellStyle(style1);
cell1.setCellValue("Hello");

Cell cell2 = row1.createCell(1);
cell2.setCellStyle(style1);
cell2.setCellValue("world!");

6. 概要

この記事では、CellStyleとそのFontプロパティを使用してApachePOIでセルのスタイルを設定する方法を学習しました。 この記事で説明するように、落とし穴を回避できれば、セルのスタイリングは比較的簡単です。

コード例では、Excelアプリケーション自体を使用しているかのように、必要に応じてスプレッドシートドキュメントのスタイルをプログラムで設定する方法を示しました。 これは、見栄えの良いデータのプレゼンテーションを含むスプレッドシートを生成する必要がある場合に最も重要です。

いつものように、記事のソースコードはGitHubから入手できます。