Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Apache POI は、Java で Word や Excel などの Office ドキュメントを読み書きするためのライブラリです。

この記事では、Spring Boot の Web アプリケーションから、Apache POI を使って Excel ドキュメントを出力し、ブラウザでダウンロードする方法を解説します。

Spring Boot プロジェクトの作成

はじめに、Spring Initializr を使用して、Spring Boot プロジェクトの初期化を行っていきます。

ポテパンダの一言メモ

Spring Boot を使用するには、使用する端末に JDK が必要で、さらに、環境変数 JAVA_HOME に、JDK の実行ディレクトリへのパスを指定しておく必要があります。

 

【関連記事】
Mac環境でのJava開発!環境変数・PATHの通し方を学ぼう!

以下のリンクから、Spring Initializr のページを開き、プロジェクトの設定を行います。

・Spring Initializr
https://start.spring.io

今回、設定する内容は次の表のとおりです。

項目 設定値
Project Gradle Project
Language Java
Spring Boot 2.6.1
Project Metadata 任意
デフォルトのままでも可
Packaging Jar
Java 17
Dependencies Spring Web
Thymeleaf

<設定画面のイメージ>

設定が終わったら「GENERATE」ボタンをクリックします。すると、設定した内容で Spring Boot のテンプレートがダウンロードできます。

ダウンロードしたファイルは、任意のディレクトリに解凍しておきます。

プロジェクトのビルド

ダウンロードしたテンプレートをビルドします。

コンソール(Windows の場合はコマンドプロンプト)を開き、先ほどダウンロードしたファイルを解凍したディレクトリに移動します。

cd path/to/demo

次のコマンドを入力してプロジェクトをビルドします。

./gradlew

Windows の場合は、以下のバッチファイルを起動します。

.\gradlew.bat

初回のビルドは、Gradle のインストールなどが行われ時間がかかりますが、少し待ちましょう。

ビルドが完了すると、次のように「BUILD SUCCESSFUL」の文字がコンソール上に出力されます。

Apache POI のインストール

次に、先ほど作成した Spring Boot プロジェクトに、Apache POI の依存関係を追加します。

build.gradle を開き、依存関係(dependencies)に以下の1行を追加します。

implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '5.1.0'

Eclipse や Spring Boot の拡張機能をインストールした VSCode (Visual Studio Code)であれば、build.gradle を編集して保存すると、自動的にライブラリのダウンロード等が行われ、依存関係が解決されます。

ここまでの手順で、環境の設定は完了です。

POI で Excel を出力してみよう

それでは、POI を使って Excel ファイルを出力するサンプルコードを作成していきましょう。

出力画面のHTMLを作成

まず、ビューとなる HTML から作成します。

resources/templates/ の下に poi.html というファイル名で新しくファイルを作成します。

poi.html は Excel 出力を開始するボタンが1つだけあるシンプルな HTML です。今回は、テンプレートエンジンに Spring 互換の Thymeleaf を使用しています。

<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8" />
        <title>POI Sample</title>
    </head>
    <body>
        <form th:action="@{/form}" method="post" th:object="${myForm}">
            <input type="submit" value="出力" />
        </form>
    </body>
</html>

コントローラーの作成

次にコントローラーを作成します。java/com/example/demo の下に、PoiController.java という名前で新しくクラスを作成します。

作成されたファイルのコードを編集し、画面の初期表示を行う index メソッドと、出力ボタンのクリックで Excel ファイルをダウンロードする output メソッドの2つを作成します。

package sample.thymeleaf.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/poi")
public class PoiController {

    @GetMapping
    public String init(Model model) {
        return "poi";
    }

    @PostMapping
    public String output() {
        System.out.println("form.value=" + form.getValue());
        return "form";
    }
}

Excel ファイルの出力処理は、後述する内容で実装していくため、この時点では output メソッドの中身は仮の状態です。

画面の確認

Excel ファイルを作成する処理を実装する前に、一旦この状態で画面が表示できるか確認してみましょう。

作成した Web アプリケーションを起動するには、コンソール上で以下のコマンドを入力します。

./gradlew bootrun

Excel 出力処理の実装

それでは、POI を使って Excel ドキュメントを作成し、ブラウザでダウンロードする処理を書いていきましょう。

java/com/example/demo の下に、ExcelService.java という名前で新しくクラスを作成し、次のコードを打ち込みましょうや

今回は、A1セルに、ダウロードを行った時間を出力する簡単なサンプルコードで動作を検証してみます。

package com.example.demo;

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

@Serivce
public class ExcelService {

  public void createWorkbook(OutputStream outputStream) {

    // xlsx形式ブックの生成
    Workbook wb = new XSSFWorkbook();
    // シートの生成
    Sheet sh = wb.createSheet();
    // 行・セルの生成
    Row row = sh.createRow(0);
    Cell cell = row.createCell(0);

    try {
      // 現在時刻を取得
      String now = LocalDateTime.now()
          .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

      // セルに値を設定
      cell.setCellValue("出力時間:" + now); // 値のセット

      // Excel出力
      wb.write(outputStream);
    } finally {
      try {
        wb.close();
      } catch (Exception ex) {
      }
    }
  }
}

コントローラーの output メソッドを修正し、ボタンが押されたときに、上で作成した ExcelService を呼び出し、Excel ドキュメントをダウロードする処理に書き換えます。

@Controller
@RequestMapping("/poi")
public class PoiController {

  @GetMapping
  public String init(Model model) {
    return "poi";
  }

  @RequestMapping(
    value = "/output",
    method = RequestMethod.POST,
    produces = MediaType.APPLICATION_OCTET_STREAM_VALUE
  )
  public void output() {
    //HTTPヘッダに、ダウンロードファイル名を設定
    response.addHeader("Content-Disposition", "attachment; filename=\"sample.xlsx\"");
    //Excelファイルの作成と、レスポンスストリームへの書き込み
    try (ServletOutputStream stream = response.getOutputStream()) {
      excelService.createWorkbook(baos);
    }
  }
}

これで、今回のサンプルアプリケーションは完成です。もう一度、アプリケーションを実行し、Excel ファイルのダウンロードが出来るか試してみましょう。

まとめ

Spring Boot + POI で、Excel ドキュメントの作成とダウロードを行う方法を解説してきました。

Apache POIは、Excel 以外の他の Office 系ドキュメントも扱うことができるため、是非試してみましょう。

【関連記事】
JavaでExcelファイルの読み込み・作成・出力方法を解説!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。