はじめに
Javaを使って帳票(レポートや請求書など)をExcel形式で自動生成したいというニーズは、業務システムの現場で非常に多く見られます。本記事では、Javaライブラリ「Apache POI」を使って、Excel(.xlsx)帳票を作成する方法を詳しく解説します。
- Excelファイルの作成と保存
- セルの書式設定や罫線
- 画像や数式の挿入
- 実務向けテンプレート帳票の構築
Apache POIとは?
Apache POIは、JavaでMicrosoft Officeファイル(Excel、Wordなど)を読み書きできるライブラリです。
.xls
形式:HSSF(古いExcel).xlsx
形式:XSSF(新しいExcel)
本記事では .xlsx
を扱う XSSF
を使用します。
開発環境の準備
Maven依存関係
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.5</version>
</dependency>
使用するクラス
XSSFWorkbook
XSSFSheet
XSSFRow
XSSFCell
基本的なExcel帳票の作成
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
public class ExcelReportBasic {
public static void main(String[] args) {
try (XSSFWorkbook workbook = new XSSFWorkbook()) {
XSSFSheet sheet = workbook.createSheet("売上レポート");
XSSFRow header = sheet.createRow(0);
header.createCell(0).setCellValue("商品名");
header.createCell(1).setCellValue("単価");
header.createCell(2).setCellValue("数量");
header.createCell(3).setCellValue("小計");
Object[][] data = {
{"りんご", 100, 3},
{"バナナ", 80, 5},
{"みかん", 90, 4}
};
for (int i = 0; i < data.length; i++) {
XSSFRow row = sheet.createRow(i + 1);
row.createCell(0).setCellValue((String) data[i][0]);
row.createCell(1).setCellValue((int) data[i][1]);
row.createCell(2).setCellValue((int) data[i][2]);
row.createCell(3).setCellFormula("B" + (i + 2) + "*C" + (i + 2));
}
sheet.autoSizeColumn(0);
sheet.autoSizeColumn(1);
sheet.autoSizeColumn(2);
sheet.autoSizeColumn(3);
try (FileOutputStream out = new FileOutputStream("帳票.xlsx")) {
workbook.write(out);
System.out.println("帳票を作成しました。");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
書式設定や罫線の適用
XSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
XSSFFont font = workbook.createFont();
font.setBold(true);
style.setFont(font);
header.getCell(0).setCellStyle(style);
header.getCell(1).setCellStyle(style);
header.getCell(2).setCellStyle(style);
header.getCell(3).setCellStyle(style);
画像を挿入する(会社ロゴ等)
InputStream is = new FileInputStream("logo.png");
byte[] bytes = IOUtils.toByteArray(is);
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
is.close();
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = new XSSFClientAnchor();
anchor.setCol1(0);
anchor.setRow1(5);
drawing.createPicture(anchor, pictureIdx);
実務帳票に活用できるTips
- 数式を利用して合計を計算(
SUM
など) - セルの幅・高さを自動調整
- 日付フォーマット(
yyyy/MM/dd
)の適用 - テンプレートExcelを読み込んで加工
まとめ
Apache POIを使えば、Javaで柔軟にExcel帳票を自動生成できます。請求書、売上レポート、工程表など、さまざまなフォーマットに対応できるため、業務自動化・レポート作成に最適です。