mcpField
A
apache-poi

apache-poi

github.com/claude-dev-suiteドキュメント4637 回インストール2 日前に更新
リポジトリ

apache-poi について

apache-poiは、Apache POIでExcelワークブックを読み書きするJava開発者向けのクイックリファレンススキルです。実用的な処理例、リソースとメモリの管理、表計算に関する一般的な問題の調査を扱います。

主な機能

  1. 01Excelワークブックの作成と出力
  2. 02セルスタイルの再利用
  3. 03大規模ワークブックのストリーミング書き込み
  4. 04イベントベースの大容量ファイル読み取り
  5. 05ExcelとPOIの一般的なエラー診断

活用シーン

  1. 01アプリケーションデータからExcelを生成
  2. 02RESTエンドポイントでワークブックを配信
  3. 03メモリ使用量を抑えた大規模表の処理
  4. 04セルの型や書式の問題解決

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill apache-poi

インストール後、Claude Code で/apache-poiを入力して読み込まれたか確認します。

詳細

Apache POI - クイックリファレンス

このスキルを使用しない場合

  • CSV ファイル - CSV には OpenCSV、Apache Commons CSV、または Files.lines() を使用してください
  • PDF の生成 - 代わりに Apache PDFBox または iText を使用してください
  • 大きな Excel ファイル(100k 行超) - SXSSFWorkbook を使用するか、CSV へのエクスポートを検討してください
  • Excel の数式/マクロ - POI のマクロサポートは限定的です。VBA の代替手段を検討してください
  • リアルタイムの Excel 編集 - POI は生成/解析向けであり、共同編集には対応していません

詳細情報: 包括的な API ドキュメント、高度な書式設定、数式の処理については、technology: apache-poi を指定して mcp__documentation__fetch_docs を使用してください。

基本パターン

Maven
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version>
</dependency>
Excel の作成
try (Workbook workbook = new XSSFWorkbook()) {
    Sheet sheet = workbook.createSheet("Data");

    // Header
    Row header = sheet.createRow(0);
    header.createCell(0).setCellValue("Name");
    header.createCell(1).setCellValue("Email");

    // Data
    Row row = sheet.createRow(1);
    row.createCell(0).setCellValue("John");
    row.createCell(1).setCellValue("[email protected]");

    // Auto-size
    sheet.autoSizeColumn(0);
    sheet.autoSizeColumn(1);

    // Write
    workbook.write(new FileOutputStream("output.xlsx"));
}
エクスポートサービス
@Service
public class ExportService {
    public byte[] exportToExcel(List<User> users) throws IOException {
        try (Workbook wb = new XSSFWorkbook();
             ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            Sheet sheet = wb.createSheet("Users");
            // ... populate rows
            wb.write(out);
            return out.toByteArray();
        }
    }
}
REST ダウンロードエンドポイント
@GetMapping("/export")
public ResponseEntity<byte[]> export() throws IOException {
    byte[] data = exportService.exportToExcel(users);
    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=data.xlsx")
        .contentType(MediaType.APPLICATION_OCTET_STREAM)
        .body(data);
}

セルのスタイル

CellStyle headerStyle = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
headerStyle.setFont(font);
cell.setCellStyle(headerStyle);

アンチパターン

アンチパターン問題点正しい方法
ワークブックを閉じないメモリーリーク、ファイルロックtry-with-resources を使用します:try (Workbook wb = new XSSFWorkbook())
ループ内でスタイルを作成するワークブックのスタイル数は最大 64,000 個ですスタイルは一度だけ作成し、セル間で再利用します
大きなファイルに XSSFWorkbook を使用する100k 行を超えると OutOfMemoryError が発生しますストリーミング書き込みには SXSSFWorkbook を使用します
ファイル全体をメモリーに読み込む大きなファイルではメモリーが枯渇します読み込みにはイベントベースの解析(SAX)を使用します
セルの型を設定しないデータが正しく解釈されませんセルの型を明示的に設定します:cell.setCellType(CellType.NUMERIC)
すべての列に autoSizeColumn() を使用する特に行数が多い場合、非常に遅くなります幅を手動で設定するか、使用を最小限にします
列インデックスをハードコードする変更に弱く、列の変更で壊れます定数または列名のマップを使用します
大規模なデータセットを Excel に出力するExcel には 100 万行の上限があり、処理も遅くなります代わりに CSV またはデータベースへのエクスポートを検討してください

よくある問題の解決方法

問題原因解決策
大きな Excel ファイルで OutOfMemoryError が発生するXSSFWorkbook を使用しているため、すべてのデータがメモリーに読み込まれていますストリーミングには SXSSFWorkbook に切り替えます
IllegalStateException: Cannot get a STRING value from a NUMERIC cellセルの型に合わない取得メソッドを使用しています読み込み前に cell.getCellType() で型を確認します
生成後にファイルが破損するワークブックが正しく閉じられていませんtry-with-resources を使用するか、wb.close() を明示的に呼び出します
スタイルが適用されない64,000 個のスタイル上限を超えていますCellStyle オブジェクトを再利用し、ループ内で作成しないでください
Excel で数値がテキストとして表示されるセルの型が設定されていませんcell.setCellType(CellType.NUMERIC) を使用し、数値として値を設定します
数式が計算されない数式モードが設定されていませんcell.setCellFormula("SUM(A1:A10)") を使用するか、再計算を強制します
生成が非常に遅い大きなシートで autoSizeColumn() を使用しています削除するか、重要な列にのみ呼び出します
日付の書式が正しくない既定の書式が適していませんカスタム書式を指定した日付用 CellStyle を作成します

関連スキル

参考資料

コメント