easyexcel-write について
easyexcel-write は、EasyExcel でテンプレートを使わずにオブジェクトや Map から Excel を生成する Java 開発者向けスキルです。ヘッダー、スタイル、セル結合、画像、複数シートなどの書き込み方法を扱います。
主な機能
- 01オブジェクトや Map から Excel を生成
- 02複雑または動的なヘッダーの設定
- 03出力列と書式の選択
- 04スタイルのカスタマイズとセル結合
- 05画像、数式、リッチテキストの出力
- 06複数シートと Web 出力に対応
活用シーン
- 01注文、ユーザー、財務データのエクスポート
- 02実行時データに基づくヘッダー生成
- 03画像や数式を含むシートの作成
- 04Web レスポンスでの Excel ダウンロード提供
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ full-stack-skills/ java-skills --skill easyexcel-writeインストール後、Claude Code で/easyexcel-writeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlexamples/advanced/15-hyperlink.md16-comment.md17-formula.md18-rich-text.mdexamples/annotation/04-complex-head.md05-converter.md06-width-height.md07-index-data.mdexamples/async/25-async-task.mdexamples/bigdata/24-page-write.mdexamples/business/29-user-export.md30-finance-stock.mdexamples/conversion/27-custom-converter.mdexamples/dynamic/26-dynamic-head.mdexamples/error-handling/28-validator.mdexamples/image/13-image-demo.md14-multi-image.mdexamples/merge/11-annotation.md12-strategy.mdexamples/multi-sheet/21-repeated-same.md22-different-classes.md23-table.mdexamples/simple/01-demo-data.md02-three-ways.md03-exclude-include.mdexamples/style/08-annotation-style.md09-strategy.md10-auto-width.mdexamples/web/19-controller.md詳細
EasyExcel データ書き込み(Write)
公式ドキュメント:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 公式サンプル:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java 現在のバージョン:
com.alibaba:easyexcel:4.0.3(Apache-2.0、リポジトリはアーカイブ済みで、バグ修正のみ)
このスキルは、**「プログラムによる Excel の生成」**に特化しています。ユーザーが事前に用意したテンプレートを持たず、Java オブジェクトや Map から構造化された Excel(注文、ユーザー、財務、在庫、レポート、照合明細、承認書)を直接生成するよう求める場合は、このスキルを使用してください。
対応範囲
✅ 得意分野
- 最小限の書き込み(JDK8+ の書き方、従来の書き方、Builder の書き方)
- 複雑なヘッダー(複数レベルのヘッダー
@ExcelProperty({"主标题", "副标题"})) - 列を選択してエクスポート(
includeColumnFiledNames/excludeColumnFiledNames) - アノテーションによる書式定義(
@ColumnWidth@ContentRowHeight@DateTimeFormat@NumberFormat) - カスタムスタイル(アノテーション方式 / インターセプター方式 /
HorizontalCellStyleStrategy) - セルの結合(
@ContentLoopMerge/LoopMergeStrategy) - 画像のエクスポート(File/InputStream/URL/byte[] など、複数のソース)
- ハイパーリンク/コメント/数式/リッチテキスト(
WriteCellData系) - 動的ヘッダー(実行時にヘッダーを決定)
- 複数回の書き込み/複数の Sheet/複数の Table
HttpServletResponseへの Web からの直接出力
⚠️ 制限事項
- 1 つの Sheet に対する一括書き込みは 5000 行未満を推奨します(データ量が多い場合は分割してください)
- スタイルオブジェクトは最大 6W 個までです。それを超えると Excel を開けなくなります
- 画像はメモリに保持されます。非常に大きな画像は OSS へのアップロードを推奨します
- コメントには
inMemory(true)が必要です - 03 版(
.xls)との互換性にはexcelType(ExcelTypeEnum.XLS)を使用してください
❌ 対象外(このスキルを使うべきではないシナリオ。ほかのスキルを使用してください)
- 事前に用意したテンプレートへの入力 → このスキルは適していません。
easyexcel-fillを使用してください - Excel データの読み取り → このスキルは適していません。
easyexcel-readを使用してください - CSV ファイルの処理 → このスキルは適していません。commons-csv / OpenCSV をご自身で使用してください
- Word/PPT → このスキルは適していません。Apache POI / Apache POI-XML を使用してください
データプライバシー
このスキルは、ユーザーデータを収集、保存、送信しません。コード例はすべて、ローカル開発の参考用です。
このスキルを使用する場面
- ユーザーが「Excel をエクスポート」「Excel を生成」「Excel をダウンロード」「注文/ユーザー/財務/在庫をエクスポート」と言った場合
- 事前に用意したテンプレートがなく、プログラムによる構造化された Excel の生成が必要な場合
- 業務上、「Sheet を分ける(月別/ステータス別/種類別)」「Table を分ける(複数の表ブロック)」などの要件がある場合
- 画像、ハイパーリンク、数式、リッチテキスト、セルの結合をエクスポートする必要がある場合
クイックスタート
一般的な呼び出し方法(3 種類の書き方):
// 写法 1:JDK8+ 用 Supplier(since 3.0.0-beta1,最简洁)
EasyExcel.write(fileName, DemoData.class)
.sheet("模板")
.doWrite(() -> data());
// 写法 2:传统 + 已有 List
List<DemoData> data = data();
EasyExcel.write(fileName, DemoData.class)
.sheet("模板")
.doWrite(data);
// 写法 3:Builder(多次写入 / 复杂配置)
try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
excelWriter.write(data(), writeSheet);
}
公式原文:「データ量は 5000 以内を推奨」(1 つの Sheet への一括書き込みの推奨上限)。
ワークフロー
Step 1. データモデルを定義する — DTO/VO を作成し、@ExcelProperty などのアノテーションを付与します
Step 2. 書き込み方法を選択する — 1 回の doWrite() / 複数回の excelWriter.write() / doWrite() の繰り返し
Step 3. Builder を設定する — 列の選択、ヘッダー、スタイル、インターセプターの登録などを行います
Step 4. データを用意する — List<DTO> / List<List<String>> を準備します
Step 5. 書き込みを実行する — try-with-resources で ExcelWriter を閉じます
Step 6. 出力を検証する — 生成された .xlsx を開いて、ヘッダー/スタイル/書式/結合を確認します
重要:アノテーション早見表
| アノテーション | 用途 | 主な属性 |
|---|---|---|
@ExcelProperty | 列名/インデックス/コンバーターを指定 | value, index, order, converter |
@ExcelIgnore | このフィールドを無視 | —— |
@ExcelIgnoreUnannotated | クラスレベル:アノテーションのないフィールドは読み書きの対象外 | —— |
@DateTimeFormat | 日付形式 | value, use1904windowing |
@NumberFormat | 数値形式 | value, roundingMode |
@ColumnWidth | 列幅 | value |
@HeadRowHeight | ヘッダー行の高さ | value |
@ContentRowHeight | 内容行の高さ | value |
@HeadStyle | ヘッダーのスタイル(POI 形式) | fillPatternType, fillForegroundColor, font など |
@HeadFontStyle | ヘッダーのフォント | fontHeightInPoints, color, bold など |
@ContentStyle | 内容のスタイル | HeadStyle と同じ |
@ContentFontStyle | 内容のフォント | HeadFontStyle と同じ |
@ContentLoopMerge | 繰り返し結合 | eachRow |
@OnceAbsoluteMerge | 一度だけ行う絶対位置での結合 | firstRowIndex lastRowIndex など |
公式原文:
orderのデフォルト値はInteger.MAX_VALUEです。優先順位はindex>order>valueです。 公式原文:「index と name の同時使用は推奨しません。index のみを使うか、name のみで照合してください」
リファレンスライブラリ(必要に応じて読み込み)
詳細なコードとコメントは references/ に分割されています。用途に応じて読み込んでください。
API と基本パターン
- references/api/3-write-modes.md — 3 種類の基本的な書き込み方法(最小限 / 列の選択 / 複数回の書き込み)
- references/api/key-classes.md — Key Classes / Methods 早見表
模式化(表头 / 样式 / 合并 / 图片 / 富文本 / Web / 高级 / 大数据)
- references/patterns/header-format-style.md — 复杂表头 / 自定义样式(注解 + 拦截器)
- references/scenarios/merge-cell.md — 合并单元格
- references/scenarios/image-export.md — 图片导出(多来源 + 多图嵌入)
- references/scenarios/hyperlink-comment-formula-richtext.md — 超链接 / 批注 / 公式 / 富文本
- references/scenarios/web-download.md — Web 下载(含失败回 JSON)
- references/scenarios/advanced.md — 动态表头 / 自动列宽 / 自定义拦截器 / 03 版兼容
- references/scenarios/million-row.md — 百万级分批写入
故障排查
- references/troubleshooting/gotchas.md — 12 条常见错误与正确做法
References
- 官方文档:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write
- 官方示例:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
- 项目主页:https://easyexcel.opensource.alibaba.com/
- GitHub:https://github.com/alibaba/easyexcel
- API 参考:https://easyexcel.opensource.alibaba.com/docs/current/api/