国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

EasyExcel動態(tài)頭導(dǎo)出

這篇具有很好參考價值的文章主要介紹了EasyExcel動態(tài)頭導(dǎo)出。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

這段時間的項目中需要導(dǎo)出動態(tài)表格。
根據(jù)所選的參數(shù)導(dǎo)出對應(yīng)的字段內(nèi)容
EasyExcel動態(tài)頭導(dǎo)出

下圖所示選擇下面幾個tab頁就需要導(dǎo)出對應(yīng)的表頭字段
EasyExcel動態(tài)頭導(dǎo)出

下面為具體實現(xiàn)的效果。表頭樣式可以通過EasyExcel 提供的方法自定義。
EasyExcel動態(tài)頭導(dǎo)出


具體實現(xiàn)

主要是通過 傳入 exportItem 這個條件來決定導(dǎo)出的事項。

下附實現(xiàn)代碼


public boolean export(QueryBO queryBo) throws CustomException {
    List<Integer> exportItem = queryBo.getExportItem();
    List<BankAccountOverviewVO> bankAccountOverviewList =
        accountOverviewList(queryBo, new PageInfoVo());
    // 動態(tài)創(chuàng)建表頭
    List<List<String>> headList = new ArrayList<>();
    // 組裝數(shù)據(jù)
    List<List<Object>> dataList = new ArrayList<>();
    // 表頭合并的邏輯
    List<CellRangeAddress> cellRangeAddressList = new ArrayList<>();
    // 組裝賬戶信息總覽 導(dǎo)出數(shù)據(jù)
    builidAccountOverviewExportData(
        exportItem, bankAccountOverviewList, headList, dataList, cellRangeAddressList);

    String fileName = "信息總覽.xlsx";
		// 調(diào)用EasyExcel 方法輸出文件流
    try {
      HttpServletResponse response = ServletUtils.getResponse();
      response.setContentType("application/msexcel;charset=utf-8");
      response.setHeader(
          "content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
      OutputStream out = response.getOutputStream();
      EasyExcel.write(out)
          .head(headList) // 設(shè)置表頭數(shù)據(jù)
          .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25)) // excel 樣式設(shè)置
          .autoCloseStream(Boolean.TRUE) // 自動關(guān)閉文件流
          .sheet("信息總覽")
          .doWrite(dataList); // 數(shù)據(jù)list
      // 開始導(dǎo)出
    } catch (Exception e) {
      LoggerUtils.error(e.getMessage());
      return false;
    }
    return true;
  }

數(shù)據(jù)組裝方法

builidAccountOverviewExportData

主要實現(xiàn)的原理是通過List<Integer> exportItem 來判斷需要導(dǎo)出的tab塊。

其中使用了 getApiModelName(OverviewBankBookOcceVO.class); 方法映射對象的字段名進(jìn)行快捷組裝。

private void builidAccountOverviewExportData(
      List<Integer> exportItem,
      List<BankAccountOverviewVO> bankAccountOverviewList,
      List<List<String>> headList,
      List<List<Object>> dataList,
      List<CellRangeAddress> cellRangeAddressList) {
    // --------------表頭拼接-------------
    // 賬戶信息
    List<String> bankBookHead = new ArrayList<>();
    bankBookHead.add("企業(yè)主體編碼");
    bankBookHead.add("企業(yè)主體名稱");
    for (String head : bankBookHead) {
      List<String> bankBookHeadTitle = new ArrayList<>();
      bankBookHeadTitle.add(head);
      headList.add(bankBookHeadTitle);
    }
	// 字段下標(biāo)?。。。。。。。。。?/span>
    int index = 13;
    if (CollectionUtils.isNotEmpty(exportItem)) {
      // 賬面發(fā)生額
      if (exportItem.contains(BankAccountOverviewExportTypeEnum.BANK_BOOK_OCCE.getValue())) {
        List<String> apiModelNameList = getApiModelName(OverviewBankBookOcceVO.class);
        for (String apiModelName : apiModelNameList) {
          List<String> bankBookOccHeadTitle = new ArrayList<>();
          bankBookOccHeadTitle.add("賬面發(fā)生額");
          bankBookOccHeadTitle.add(apiModelName);
          headList.add(bankBookOccHeadTitle);
        }
        //      // 需要合并的表頭位置  (起始行,結(jié)束行,起始列,結(jié)束列)
        //      int size = apiModelNameList.size();
        //      CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, index, index + size -
        // 1);
        //      cellRangeAddressList.add(cellRangeAddress);
        //      index += size;
      }

      // 發(fā)生額調(diào)節(jié)表
      if (exportItem.contains(BankAccountOverviewExportTypeEnum.OCC_ADJUSTMENT.getValue())) {
        List<String> apiModelNameList = getApiModelName(OverviewOccAdjustmentVO.class);
        for (String apiModelName : apiModelNameList) {
          List<String> occAdjustmentInfoHeadTitle = new ArrayList<>();
          occAdjustmentInfoHeadTitle.add("發(fā)生額調(diào)節(jié)表");
          occAdjustmentInfoHeadTitle.add(apiModelName);
          headList.add(occAdjustmentInfoHeadTitle);
        }
      }

      // 網(wǎng)銀流水
      if (exportItem.contains(BankAccountOverviewExportTypeEnum.EBANK_FLOW.getValue())) {
        List<String> apiModelNameList = getApiModelName(OverviewEbankFlowVO.class);
        for (String apiModelName : apiModelNameList) {
          List<String> ebankFlowHeadTitle = new ArrayList<>();
          ebankFlowHeadTitle.add("網(wǎng)銀流水");
          ebankFlowHeadTitle.add(apiModelName);
          headList.add(ebankFlowHeadTitle);
        }
      }

      // 核對余額
      if (exportItem.contains(BankAccountOverviewExportTypeEnum.RECONCILE_BALANCE.getValue())) {
        List<String> apiModelNameList = getApiModelName(OverviewReconcileBalanceVO.class);
        for (String apiModelName : apiModelNameList) {
          List<String> reconcileBalancesHeadTitle = new ArrayList<>();
          reconcileBalancesHeadTitle.add("核對余額");
          reconcileBalancesHeadTitle.add(apiModelName);
          headList.add(reconcileBalancesHeadTitle);
        }
        // 需要合并的表頭位置  (起始行,結(jié)束行,起始列,結(jié)束列)
        int size = apiModelNameList.size();
        CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, index, index + size - 1);
        cellRangeAddressList.add(cellRangeAddress);
        index += size;
      }

      // 雙向核對結(jié)果
      if (exportItem.contains(BankAccountOverviewExportTypeEnum.CHECK_RESULT.getValue())) {
        List<String> apiModelNameList = getApiModelName(OverviewCheckResultVO.class);
        for (String apiModelName : apiModelNameList) {
          List<String> checkResultHeadTitle = new ArrayList<>();
          checkResultHeadTitle.add("雙向核對結(jié)果");
          checkResultHeadTitle.add(apiModelName);
          headList.add(checkResultHeadTitle);
        }
      }
    }

    // ----------------組裝數(shù)據(jù)-------------
    for (BankAccountOverviewVO bankAccountOverview : bankAccountOverviewList) {
      List<Object> data = new ArrayList<>();
      // 賬戶信息總覽
      data.add(bankAccountOverview.getCompanyId());
      data.add(bankAccountOverview.getCompanyName());
      String checkPlanFlag = bankAccountOverview.getCheckPlanFlag();
      if (StringUtils.isNotEmpty(checkPlanFlag)) {
        checkPlanFlag = checkPlanFlag.replaceAll("0", "是");
        checkPlanFlag = checkPlanFlag.replaceAll("1", "否");
      }
      data.add(checkPlanFlag);
      data.add(bankAccountOverview.getNoCheckReason());
      // -------動態(tài)表格數(shù)據(jù)組裝-----
      if (CollectionUtils.isNotEmpty(exportItem)) {
        // 賬面發(fā)生額
        if (exportItem.contains(BankAccountOverviewExportTypeEnum.BANK_BOOK_OCCE.getValue())) {
          data.add(bankAccountOverview.getBankBookOccInfo().getOpenBalance());
          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueAdd());
          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueReduce());
          data.add(bankAccountOverview.getBankBookOccInfo().getBalance());
          data.add(bankAccountOverview.getBankBookOccInfo().getOpenBalanceF());
          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueAddF());
          data.add(bankAccountOverview.getBankBookOccInfo().getCurrentIssueReduceF());
          data.add(bankAccountOverview.getBankBookOccInfo().getBalanceF());
        }

        // 發(fā)生額調(diào)節(jié)表
        if (exportItem.contains(BankAccountOverviewExportTypeEnum.OCC_ADJUSTMENT.getValue())) {
          data.add(bankAccountOverview.getOccAdjustmentInfo().getCurrentIssueAdd());
          data.add(bankAccountOverview.getOccAdjustmentInfo().getCurrentIssueReduce());
        }

        // 網(wǎng)銀流水
        if (exportItem.contains(BankAccountOverviewExportTypeEnum.EBANK_FLOW.getValue())) {
          data.add(bankAccountOverview.getEbankFlowInfo().getOpenBalance());
          data.add(bankAccountOverview.getEbankFlowInfo().getCurrentIssueAdd());
          data.add(bankAccountOverview.getEbankFlowInfo().getCurrentIssueReduce());
          data.add(bankAccountOverview.getEbankFlowInfo().getBalance());
        }

        // 核對余額
        if (exportItem.contains(BankAccountOverviewExportTypeEnum.RECONCILE_BALANCE.getValue())) {
          data.add(bankAccountOverview.getReconcileBalances().getBalanceVerify());
          data.add(bankAccountOverview.getReconcileBalances().getDebitOccFVerify());
          data.add(bankAccountOverview.getReconcileBalances().getCreditOccFVerify());
          data.add(bankAccountOverview.getReconcileBalances().getNetAmountVerify());
        }

        // 雙向核對結(jié)果
        if (exportItem.contains(BankAccountOverviewExportTypeEnum.CHECK_RESULT.getValue())) {
          data.add(bankAccountOverview.getCheckResult().getDebitOccF());
          data.add(bankAccountOverview.getCheckResult().getCreditOccF());
          data.add(bankAccountOverview.getCheckResult().getDebitRatio());
          data.add(bankAccountOverview.getCheckResult().getCreditRatio());
          data.add(bankAccountOverview.getCheckResult().getUntreatedProject());
          data.add(bankAccountOverview.getCheckResult().getExceptionProject());
        }
      }
      dataList.add(data);
    }
  }

getApiModelName 方法代碼如下,因為項目引入了 swagger 所以數(shù)據(jù)接口對象都會使用到 @ApiModelProperty 注解 如下圖所示。通過反射獲取實體類的對應(yīng)屬性的注解名稱list。

@Data
@ApiModel(value = "vo對象", description = "vo對象")
public class OverviewBankBookOcceVO {
  @ApiModelProperty(value = "銀行賬號")
  private String bankAccount;

  @ApiModelProperty("期初余額(原幣)")
  private BigDecimal openBalance;
}
/**
   * @description 獲取對象中 api 注解的名稱
   * @params [object]
   * @return
   */
  private List<String> getApiModelName(Object object) {
    Class<T> aClass = (Class<T>) object;
    Field[] fields = aClass.getDeclaredFields();
    List<String> apiModelName = new ArrayList<>();
    for (Field field : fields) {
      ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class);
      String value = annotation.value();
      if (field.getName().equals("bankAccount")) {
        continue;
      }
      apiModelName.add(value);
    }
    return apiModelName;
  }

本文由 SoGeek_Studio 發(fā)布,有任何問題請留言評論,歡迎指正。文章來源地址http://www.zghlxwxcb.cn/news/detail-479433.html

到了這里,關(guān)于EasyExcel動態(tài)頭導(dǎo)出的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • easyexcel導(dǎo)入導(dǎo)出+動態(tài)列+自定義樣式

    easyexcel導(dǎo)入導(dǎo)出+動態(tài)列+自定義樣式

    目錄 1、引用maven依賴 2、模板文件template1.xlsx 3、導(dǎo)出效果 4、導(dǎo)入效果 5、導(dǎo)出用EasyWriteHandler 6、測試工具類?ExcelTest

    2024年02月15日
    瀏覽(21)
  • Java——使用EasyExcel導(dǎo)出動態(tài)列的Excel

    多多點贊,會變好看! 多多留言,會變有錢! 有些時候列表的列可能是動態(tài)的,需要根據(jù)動態(tài)表頭導(dǎo)出Excel文件,這時候可以使用下面的方法解決: 靜態(tài)列導(dǎo)出代碼:

    2024年02月15日
    瀏覽(35)
  • EasyExcel導(dǎo)出工具類(支持模板導(dǎo)出多Sheet導(dǎo)出)

    EasyExcel導(dǎo)出工具類(支持模板導(dǎo)出多Sheet導(dǎo)出)

    最近寫需求發(fā)現(xiàn)沒有順手excel導(dǎo)出工具類, 于是自己造了個小輪子, 鏈?zhǔn)揭籠\\".\\\"到底, 代碼既注釋 特點: 支持多sheet 支持從模板導(dǎo)出 支持分頁拿數(shù)據(jù), 避免數(shù)據(jù)量過大一次拿出導(dǎo)致內(nèi)存溢出 數(shù)據(jù)類型支持業(yè)務(wù)實體類或Map, 無需easyExcel的注解, 低侵入 ? over

    2024年02月16日
    瀏覽(27)
  • EasyExcel導(dǎo)入和導(dǎo)出數(shù)據(jù)

    EasyExcel導(dǎo)入和導(dǎo)出數(shù)據(jù)

    1.cmtroller 調(diào)用service方法,完成導(dǎo)出 2.service 調(diào)用工具類的方法完成導(dǎo)出 傳入response,標(biāo)題控制類(標(biāo)題名稱,合并的列數(shù)),員工列表,文件名稱,excel的標(biāo)題名稱,要導(dǎo)出的數(shù)據(jù)類 3.工具類中的方法 4.控制標(biāo)題類 這個類控制數(shù)據(jù)之前的顯示內(nèi)容 效果 2022-10-28 亂碼解決 因為文件

    2023年04月09日
    瀏覽(23)
  • 使用EasyExcel模版導(dǎo)出

    使用EasyExcel模版導(dǎo)出

    easyexcel官方文檔 填充Excel | Easy Excel 官方demo是利用本地模版文件填充并下載到本地 我用的是web項目,將輸出改為了輸出流 OutputStream ?模版: 效果: 使用模版文件有兩種方式,使用其中一種就可以: ??? 1.文件路徑:.withTemplate(templateFileName) ??? 2.輸入流:.withTemplate(inputS

    2024年02月14日
    瀏覽(22)
  • easyexcel 導(dǎo)出

    easyexcel 導(dǎo)出

    ?在使用EasyExcel庫進(jìn)行數(shù)據(jù)寫入時,通常我們會使用實體類來存儲數(shù)據(jù)。但是當(dāng)遇到動態(tài)查詢,無法確定屬性數(shù)量和名稱時,就需要使用Map來接收數(shù)據(jù)。然而,直接將Map中的數(shù)據(jù)寫入Excel表格并不是一件簡單的事情。接下來,我將介紹如何使用EasyExcel庫將Map數(shù)據(jù)寫入Excel表格。

    2024年02月04日
    瀏覽(17)
  • EasyExcel 批量導(dǎo)出

    EasyExcel 批量導(dǎo)出

    上篇寫了數(shù)據(jù)導(dǎo)入,本文補充一下EasyExcel 批量導(dǎo)出 包括常規(guī)excel和復(fù)雜excel 通過重寫 sheetDynamicHead 方法自定義復(fù)雜表頭 @ExcelProperty(order = 0) 注解指定excel列即可填充到指定單元格 protected List sheets() 方法內(nèi)返回多個sheet protected List sheetData(int sheetIndex)方法內(nèi)指定sheet填充的數(shù)據(jù)

    2024年02月09日
    瀏覽(13)
  • EasyExcel導(dǎo)出Excel文件

    方法一 導(dǎo)入EasyExcel依賴 創(chuàng)建實體類 OrderServiceImpl 如果希望多個sheet導(dǎo)出那么可以 測試類 方法二 導(dǎo)入EasyExcel依賴 編寫ExcelUtil 編寫Service層代碼 controller層代碼 方法一與方法二都使用了EasyExcel進(jìn)行Excel的導(dǎo)出,區(qū)別在于方法一建立了實體類進(jìn)行Excel的導(dǎo)出,這樣的好處是可以直

    2024年02月14日
    瀏覽(25)
  • EasyExcel的簡單導(dǎo)出

    EasyExcel的簡單導(dǎo)出

    EasyExcel的簡單導(dǎo)出 Controller層代碼 Service處理代碼 SysColExcelDto.java類 這是使用easyExcel提供的注解來標(biāo)記字段填充行數(shù),這種情況適用于自動生成,如果是填充excel(doFill方式)可以不用ExcelProperty注解標(biāo)識,但是需要在模板中標(biāo)記數(shù)據(jù)填充位置 模板標(biāo)記數(shù)據(jù)填充位置標(biāo)記如下,

    2024年02月15日
    瀏覽(16)
  • easyExcel合并單元格導(dǎo)出

    easyExcel合并單元格導(dǎo)出

    (很多舊項目自定義了一套Excel導(dǎo)出工具,poi版本可能不兼容,一般poi新舊版本不兼容分界線在3.17,選擇3.17版本不會發(fā)生代碼不兼容情況)

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包