この記事はこれの続きです
概要
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がダウンロードされます。
列幅はJAVAで『3000』にするとエクセルだと『11.13』。
単位は1文字の1/256らしいです…。
でも1文字の幅って環境によって変わるのでは…?と思ったりします…。
『JAVAで設定した値』がそのまま『エクセルで設定する値』にしたいけど、上手い方法が無かったです。
行高さは『JAVAで設定した値』がそのまま『エクセルで設定する値』になるので楽。
この記事の続き
参考サイトさん
バージョン
Microsoft Windows [Version 10.0.22631.3447]
JAVA 17.0.8.1
Spring Boot v3.1.10
ApachePOI 5.2.5