はじめに (対象読者・この記事でわかること)
この記事は、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:基本的なスタイル設定
まず、ワークブックとシートを用意し、セルに文字列をセットします。
Javaimport 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を適用すると、各行が均等割り付けされます。
Javacell.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テンプレートを読み込んでスタイルをコピーする方法を紹介します。
参考資料
- Apache POI Official Documentation - CellStyle
- Stack Overflow - How to justify text in a cell using Apache POI
- 『JavaによるExcel帳票自動生成入門』(技術評論社, 2023)
