はじめに (対象読者・この記事でわかること)

この記事は、JavaでExcelファイルを操作する際に「セルのテキストを均等割り付け(分散揃え)にしたい」と悩んでいる開発者向けです。特に、Apache POIの豊富なAPIの中から該当するメソッドが見つからず、実装に詰まっている方に最適です。

読み進めることで、Apache POIで均等割り付けを設定する具体的なコードと、それに関連するスタイル設定の理解が深まります。また、Excelの「均等割り付け」と「分散揃え」の関係性や、POIでの扱い方の違いも解説します。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。

  • Javaの基本的な文法とクラス/メソッドの使い方
  • Apache POIでの基本的なExcel操作(ワークブック・シート・セルの作成)

Excelの「均等割り付け」とは何か

Excelでセルのテキストを「均等割り付け」にすると、セルの左右にテキストがぴったりと揃えられ、単語間のスペースが自動的に調整されます。日本語版Excelでは「均等割り付け」ですが、英語版では「Distributed」や「Justify」と表記されます。

この設定は、帳票や帳簿のような「見た目の整った書類」を作る際に頻繁に使われます。しかし、Apache POIのJavaDocを眺めても「均等割り付け」に直結するメソッドが見つからず、実装に困ることがあります。

Apache POIで均等割り付けを実装する

POIには、セルの水平揃えを設定するCellStyle#setAlignment()というメソッドがあります。ここにHorizontalAlignment列挙型の定数を渡します。均等割り付けを実現するにはDISTRIBUTEDを使います。

ステップ1:基本的なスタイル設定

まず、ワークブックとシートを用意し、セルに文字列をセットします。

Java
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelDistributedSample { public static void main(String[] args) throws Exception { Workbook workbook = new XSSfWorkbook(); // .xlsx用 Sheet sheet = workbook.createSheet("サンプル"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("均等割り付けのサンプルです"); } }

ステップ2:均等割り付けを適用する

次に、セルスタイルを作成しHorizontalAlignment.DISTRIBUTEDを設定します。

Java
// スタイルを作成 CellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.DISTRIBUTED); // 均等割り付け style.setVerticalAlignment(VerticalAlignment.CENTER); // 上下中央はお好みで // セルに適用 cell.setCellStyle(style); // 見やすくするため列幅を広めに sheet.setColumnWidth(0, 30 * 256); // 30文字分

ステップ3:複数行に渡る均等割り付け

複数行にわたるセルで均等割り付けを使いたい場合は、改行コード\nを含めてDISTRIBUTEDを適用すると、各行が均等割り付けされます。

Java
cell.setCellValue("第一行目のテキスト\n第二行目のテキスト"); CellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.DISTRIBUTED); style.setWrapText(true); // 折り返して複数行表示 cell.setCellStyle(style);

ハマった点:英語版ドキュメントとの差異

「均等割り付け」は日本語版Excelの表記であり、POIのソースやJavaDocではDISTRIBUTEDという名前で定義されています。日本語で検索してもなかなかヒットせず、英語で「distributed alignment excel apache poi」と検索するとStack Overflowの事例が出てきます。また、POI 3.17以降は列挙型がHorizontalAlignmentに移行されたため、古いブログだとCellStyle.ALIGN_DISTRIBUTEDと書かれていて動かないケースがあります。

解決策:バージョンと列挙型を一致させる

MavenやGradleでPOIのバージョンを確認し、4.x系以降であればHorizontalAlignment.DISTRIBUTEDを使います。3.x系の古いプロジェクトではCellStyle.ALIGN_DISTRIBUTEDのままでも動作しますが、移行ガイドに従って新しいAPIに揃えることをおすすめします。

Xml
<!-- pom.xml 例:2025年時点の最新安定版 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.5</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> </dependency>

まとめ

本記事では、Apache POIでExcelセルの均等割り付け(分散揃え)を設定する方法を解説しました。

  • 水平揃えにHorizontalAlignment.DISTRIBUTEDを使う
  • 複数行にわたる場合はsetWrapText(true)も合わせて設定
  • バージョンによるAPIの違いに注意

この記事を通して、見た目の整った帳票をJavaで自動生成する際に、均等割り付けのスタイルを適用できるようになりました。次回は、均等割り付きの垂直方向スタイルや、Excelテンプレートを読み込んでスタイルをコピーする方法を紹介します。

参考資料