LoginSignup
0
0

SpringBootでApachePOIを使ったxlsxに列幅と行高さ設定

Last updated at Posted at 2024-04-13

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

概要

xlsxの生成とダウンロードは以前の記事でやってるので説明は省略。
列幅と行高さの設定がメインです。

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("ふーたお");
		Row row_ = sheet_.createRow(1);
		Cell cell_1_ = row_.createCell(CellReference.convertColStringToIndex("B"));
		cell_1_.setCellValue("私とお茶しない?");
		
		
		//---------------------------------------------------------------------------------------------
		//今回のメインはここ!
		
		//列幅。
		//スマートなやり方がどうしてもできなかったです。
		//設定 ⇒ 試しに出力 ⇒ 調整 を繰り返してくしかなさそう。
		sheet_.setColumnWidth(cell_1_.getColumnIndex(), (short) 3000);
		
		//行高さ。
		//設定はsetHeight()とsetHeightInPoints()の二種類。
		//setHeightInPoints()ならエクセルの画面で設定する『行の高さ』と同じ値で設定できます。
		row_.setHeightInPoints(40.5f);
		
		
		//---------------------------------------------------------------------------------------------
		//ダウンロード。
		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();
		
		
	}
	
	
}

実行結果

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

列幅はJAVAで『3000』にするとエクセルだと『11.13』。
image.png

単位は1文字の1/256らしいです…。
でも1文字の幅って環境によって変わるのでは…?と思ったりします…。
image.png

『JAVAで設定した値』がそのまま『エクセルで設定する値』にしたいけど、上手い方法が無かったです。

行高さは『JAVAで設定した値』がそのまま『エクセルで設定する値』になるので楽。
image.png

この記事の続き

参考サイトさん

バージョン

Microsoft Windows [Version 10.0.22631.3447]
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