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

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

https://qiita.com/waokitsune/items/806b7f87e9a8348fb47a

# 概要

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

# build.gradle

dependenciesに下記二つを追記。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/df4ba528-ed19-8978-68b0-bec16501ab4c.png)

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

build.gradleを変更したら下記を忘れないように注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/6ffd1ab0-9cc1-22b5-a769-20318218258c.png)

# Controllerクラス

```java: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/76f1ea9e-a19f-d3e7-14ae-57fd234063ee.png)

# この記事の続き

https://qiita.com/waokitsune/items/4bb38434e398dde52e7b

# 参考サイトさん

https://poi.apache.org/

https://systemcraft.biz/archives/764

https://www.javalife.jp/2023/05/01/java-apache-poi%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%80%81excel%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B/

https://www.greptips.com/posts/869/

# バージョン

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