実現したいこと
- org.apache.poi.ss.usermodelを使ってファイルを作成したい。
前提
SpringBootを使って、Excelファイル出力のAPIを作成しています。
Excelファイルの出力はできるのですが、ファイル名を指定した作成方法がわからず困っています。
ファイル名のフォーマットは、「ファイル名_yyyy_MM_dd.xlsx」です。
助言を頂きたく質問させていただきます。
発生している問題・エラーメッセージ
エラーの出力はありません。
該当のソースコード
Java
1// コントローラー 2@RequestMapping(name = "api_excel", path = "/api/excel", method = RequestMethod.GET) 3 public ExcelService excel(@RequestParam(name = "fy", required = true)Integer fy, Model model, ExcelService mav){ 4 5 //処理 6 model.addAttribute(・・・); 7 8 mav.addStaticAttribute("mydata", "myvalue"); 9 10 return mav; 11 } 12} 13 14//サービス 15public class ExcelService extends AbstractXlsxView{ 16 17 @Override 18 protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, 19 HttpServletResponse response) throws Exception { 20 // サービス処理 21 } 22} 23
試したこと
XSSF/SXSSFのドキュメントを調べたが、解決できなかったため質問しました。
補足情報(FW/ツールのバージョンなど)
JDK11
ドキュメントのURLも提示してください。どこを確認し、何を試し、何が起きたのかを具体的に記載してください。
Excel ファイルをどこにどんな名前で保存して、どのように利用したいのでしょうか? サーバーにそのまま保存? それとも、ブラウザ側に送り返す?
m.ts10806さん
以下のドキュメントを参考にしました。
ドキュメントではファイル名を指定して保存するためにHSSFWorkbookをインスタンス化して作成しています。
私のコーディングではbuildExcelDocument中でWorkbookを使っており、うまくドキュメントを取り込むことができませんでした。
https://poi.apache.org/components/spreadsheet/how-to.html
hoshi-takanoriさん
Excelファイル名は固定の日本語名で出力したいです。
作成したファイルはflutterのurl_launcherを使ってブラウザから取得したいです。
ファイル名が固定だと複数の人が同時にアクセスしたら上書きされちゃうのでは? とか、日本語ファイル名は文字コードでトラブルになりそうとか、ブラウザから取得する際のアクセス制御はどうするんだろう? とか…。
なるほど、同時アクセス制御や文字コードの考慮はしていなかったです。
そうすると、固定ファイル名にタイムスタンプを付与したほうが良いのですね。
質問は編集できますので、適宜調整を。
質問内容にファイルのフォーマットを追記しました。
>同時アクセス制御
>固定ファイル名にタイムスタンプ
年月日だけでは、同一日内のアクセスは上書きされますけど…。
時分秒ミリ秒迄やっても重なる可能性はゼロにはなりませんし、ユーザが区別出来るならその情報も付けるとか、やるならキチンとやったほうが良いと思います。
(後から『知らないデータが来た』とかなると何処かの確定申告になっちゃいます。)
jimbeさん
ご指摘ありがとうございます。
時分秒ミリ秒までのファイル名のフォーマットで出力できるように修正しました。
回答1件
あなたの回答
tips
プレビュー