複雑なマルチヘッダーとマルチシート ページの Excel テンプレートをエクスポートするには? これが Java EasyPoi インスタンスです

1: はじめに

最近の開発では、複雑なマルチヘッダー、マルチシート、マルチ画像の Excel エクスポートの問題に遭遇しました。

この記事で使用している Excel を操作するためのフレームワークは EasyPoi です。

EasyPoiの機能はその名の通りeasy、主な機能は簡単なので、poiに触れたことがない人でも、簡単な注釈とテンプレートを介して、Excelのエクスポート、Excelのテンプレートのエクスポート、Excelのインポート、Wordのテンプレートのエクスポートを簡単に書くことができます言語(表現文法に精通している)、以前の複雑な文章を完成させる

公式ホームページ:  www.wupaas.com/easypoi.htm…

API ドキュメント:  doc.wupaas.com/docs/easypo…

2: EasyPoi テンプレートコマンドの紹介

テンプレートは、複雑な Excel を処理する簡単な方法です.複雑な Excel スタイルは Excel で直接編集できるため、コーディング スタイルの地雷原を完全に回避できます.同時に、コマンドのサポートにより、テンプレートの有効性も向上します.

EasyPoi でサポートされているコマンドと機能を以下に示します。 最も重要なのは、さまざまな fe の使用方法です。

  • スペーススプリット
  • 三眼操作 { {test ? obj:obj2}}
  • n: このセルが数値型であることを示します { {n:}}
  • le: 長さの略 { {le:()}} use { {le:() > 8 ? obj1 : obj2}} if/else
  • fd: フォーマット時間 { {fd:(obj;yyyy-MM-dd)}}
  • fn: フォーマット番号 { {fn:(obj;###.00)}}
  • fe: データのトラバース、行の作成
  • !fe: 行を作成せずにデータをトラバースする
  • $fe: 下に移動して挿入、現在の行と次の行を下に移動. size() 行、次に挿入
  • #fe: 水平トラバーサル
  • v_fe: 水平トラバーサル値
  • !if: 現在の列を削除 { {!if:(test)}}
  • 一重引用符は「1」などの定数値を表し、出力は 1 です
  • &NULL&スペース
  • &INDEX& は、ループ内のシーケンス番号を示し、自動的に追加されます
  • ]] 改行文字の複数行トラバーサル エクスポート
  • 合計: 統計
  • cal: ベース +-X% 計算
  • dict: 辞書
  • i18n: 国際化

3: デザインのアイデア

1. easypoi テンプレートの指示に従って、データ構造を設計およびエクスポートし、Excel テンプレートに入力します。

2. データをクエリし、トラバースする必要があるリストに設計されたシート ページとセルを前処理します。

テンプレート テーブル内の対応するセルを下に移動し、結合する必要があるセルを結合します。

//セルを下に移動します
sheet.shiftRows(startRow, endRow, n);
コードをコピー
//結合セル
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
コードをコピー

3. テンプレートのエクスポート パラメータを作成する

// テンプレート エクスポート パラメータを作成する
TemplateExportParams params = new TemplateExportParams(dealTemplatePath, true, sheetNames);
コードをコピー

4. ワークブックの生成とエクスポート

// ワークブックを生成してエクスポート
Workbook workbook = templateExcelExportHelper.createExcelByTemplate(getMinioInputStream(BUCKET_NAME, dealTemplatePath), params, sheetMap);
コードをコピー

5. easypoi によって生成されたワークブックを処理する

/** 
 * 設定外边框
 * @param workbook 工作表
 * @param i sheet下标
 */ 
public static void setSheetBorder(Workbook workbook, int i) { 
    CellRangeAddress cellRangeAddress = new CellRangeAddress(0, workbook.getSheetAt(i).getLastRowNum (),0, 
            workbook.getSheetAt(i).getRow(0).getPhysicalNumberOfCells() -1); 
    RegionUtil.setBorderBottom(BorderStyle.MEDIUM,cellRangeAddress, workbook.getSheetAt(i)); 
    RegionUtil.setBorderLeft(BorderStyle.MEDIUM,cellRangeAddress, workbook.getSheetAt(i)); 
    RegionUtil.setBorderRight(BorderStyle.MEDIUM,cellRangeAddress, workbook.getSheetAt(i)); 
    RegionUtil.setBorderTop(BorderStyle.MEDIUM,cellRangeAddress, workbook.getSheetAt(i)); 
}
复制代码

6. ファイルを出力し、前処理によって生成されたテンプレート ファイルを削除します

//サーブレットへの出力ファイルの流れ
        setExportExcelFormat(response, workbook, exportExcelName); 

        //生成された前処理テンプレートを削除
        deleteTemplate(dealTemplatePath);
コードをコピー
/** 
 * 输出文件流
 * 
 * @param 応答
 * @param ワークブック
 * @param ファイル名
 * @throws 例外
 */ 
public void setExportExcelFormat(HttpServletResponse 応答、ワークブック ワークブック、文字列ファイル名) 例外をスローします { 
    ServletOutputStream outStream = null; 
    文字列 fileNameURL = URLEncoder.encode(fileName, "UTF-8"); 
    response.setContentType("オクテット/ストリーム"); 
    response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";" 
            + "filename*=utf-8''" + fileNameURL); 
    response.addHeader("Pargam", "no-cache"); 
    response.addHeader("
        outStream = response.getOutputStream(); 
        workbook.write(outStream); 
    } 最終的に { 
outStream.close 
        (); 
    } 
}

4: テンプレートの例

5: 前処理テンプレートのスクリーンショット

5: スクリーンショットをエクスポートする

おすすめ

転載: blog.csdn.net/m0_48922996/article/details/125817696