LoginSignup
0
0

SpringBootでApachePOIを使ったxlsxファイルダウンロードの基礎

Last updated at Posted at 2024-03-30

この記事はこれの続きです

概要

まず ApachePOIを導入するところから 始まります。
そして、 最小限のコード最低限のxlsxファイル がダウンロードできるところまで作ります。

build.gradle

dependenciesに下記二つを追記。
image.png

コピペ用
implementation 'org.apache.poi:poi:5.2.5'
implementation 'org.apache.poi:poi-ooxml:5.2.5'

build.gradleを変更したら下記を忘れないように注意。
image.png

Controllerクラス

DemoController.java
package com.example.demo;


import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;


@Controller
public class DemoController {
	
	
	@GetMapping("/")
	public void getIndex(HttpServletResponse response) throws IOException {
		
		
		//---------------------------------------------------------------------------------------------
		//エクセルファイル生成。
		Workbook workbook_ = new XSSFWorkbook();
		
		Sheet sheet_ = workbook_.createSheet("ふーたお");
		
		//createRow()に渡すのはインデックス。
		//1行目なら0、2行目なら1。
		Row row_ = sheet_.createRow(1);
		
		//2行目のB列、つまりB2セルに値がセットされる。
		Cell cell_ = row_.createCell(CellReference.convertColStringToIndex("B"));
		cell_.setCellValue("私とお茶しない?");
		
		
		//---------------------------------------------------------------------------------------------
		//ダウンロード。
		
		//ファイル名に2バイト文字を使えるように一工夫。
		response.addHeader(
				"Content-Disposition", 
				"attachment; filename*=UTF-8''" + URLEncoder.encode("胡桃.xlsx", StandardCharsets.UTF_8.name()));
		
		ServletOutputStream stream_ = response.getOutputStream();
		workbook_.write(stream_);
		stream_.close();
		
		workbook_.close();
		
		
		//---------------------------------------------------------------------------------------------
		//responseをいじっているので、『return "/index";』みたいなことをしても、ページ移動しません。
		//ページ移動せずダウンロードだけ発生することになるので、この関数の戻り値はvoid。
		
		//最小限のサンプルコードなのでtry catchは無しです。
		
		
	}
	
	
}

実行結果

ブラウザーでhttp://localhost:8080にアクセスすると、下記のようなxlsxがダウンロードされます。
image.png

この記事の続き

参考サイトさん

バージョン

Microsoft Windows [Version 10.0.19045.4239]
JAVA 17.0.8.1
Spring Boot v3.1.10
ApachePOI 5.2.5

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0