JavaでExcel帳票を自動生成する方法【Apache POI完全ガイド】

はじめに

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帳票を自動生成できます。請求書、売上レポート、工程表など、さまざまなフォーマットに対応できるため、業務自動化・レポート作成に最適です。

タイトルとURLをコピーしました