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

easyExcel 模版導(dǎo)出 中間數(shù)據(jù)縱向延伸,并且對指定列進(jìn)行合并

這篇具有很好參考價(jià)值的文章主要介紹了easyExcel 模版導(dǎo)出 中間數(shù)據(jù)縱向延伸,并且對指定列進(jìn)行合并。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

想要達(dá)到的效果

easyExcel 模版導(dǎo)出 中間數(shù)據(jù)縱向延伸,并且對指定列進(jìn)行合并,java,服務(wù)器,前端

引入maven引用

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.2.1</version>
        </dependency>

按照要求創(chuàng)建模版

備注 :

模板注意 用{} 來表示你要用的變量 如果本來就有"{","}" 特殊字符 用"\{","\}"代替
// {} 代表普通變量 {.} 代表是list的變量 {前綴.} 前綴可以區(qū)分不同的list

easyExcel 模版導(dǎo)出 中間數(shù)據(jù)縱向延伸,并且對指定列進(jìn)行合并,java,服務(wù)器,前端

代碼部分 :

合并策略代碼 :

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import io.jsonwebtoken.lang.Collections;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;

import java.util.ArrayList;
import java.util.List;

// 自定義合并策略 該類繼承了AbstractMergeStrategy抽象合并策略,需要重寫merge()方法
  public class CustomMergeStrategy extends AbstractMergeStrategy {

    /**
     * 分組,每幾行合并一次
     */
    private List<Integer> exportFieldGroupCountList;

    /**
     * 目標(biāo)合并列index
     */
    private Integer targetColumnIndex;

    // 需要開始合并單元格的首行index
    private Integer rowIndex;

    // exportDataList為待合并目標(biāo)列的值 
    public CustomMergeStrategy(List<String> exportDataList, Integer targetColumnIndex) {
      this.exportFieldGroupCountList = getGroupCountList(exportDataList);
      this.targetColumnIndex = targetColumnIndex;
    }


    @Override
    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {

      if (null == rowIndex) {
        rowIndex = cell.getRowIndex();
      }
      // 僅從首行以及目標(biāo)列的單元格開始合并,忽略其他
      if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == targetColumnIndex) {
        mergeGroupColumn(sheet);
      }
    }

    private void mergeGroupColumn(Sheet sheet) {
      int rowCount = rowIndex;
      for (Integer count : exportFieldGroupCountList) {
        if(count == 1) {
          rowCount += count;
          continue ;
        }
        // 合并單元格
        CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount + count - 1, targetColumnIndex, targetColumnIndex);
        sheet.addMergedRegionUnsafe(cellRangeAddress);
        rowCount += count;
      }
    }

    // 該方法將目標(biāo)列根據(jù)值是否相同連續(xù)可合并,存儲可合并的行數(shù) 
    private List<Integer> getGroupCountList(List<String> exportDataList){
      if (Collections.isEmpty(exportDataList)) {
        return new ArrayList<>();
      }

      List<Integer> groupCountList = new ArrayList<>();
      int count = 1;

      for (int i = 1; i < exportDataList.size(); i++) {
        if (exportDataList.get(i).equals(exportDataList.get(i - 1))) {
          count++;
        } else {
          groupCountList.add(count);
          count = 1;
        }
      }
      // 處理完最后一條后
      groupCountList.add(count);
      return groupCountList;
    }
  }

導(dǎo)出部分 :

@Test
    public void complexFillTest() throws IOException {
        //正式代碼時(shí) 改成 input或者 file 傳入
        String templateFileName = "D:/模版.xls";
        //改成導(dǎo)出的output或者其他方式寫出 也可
        String fileName = "D:/下載的文件.xls";

        // 方案1
        try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).excelType(ExcelTypeEnum.XLS).build()) {

            //數(shù)據(jù)準(zhǔn)備 改成自己的即可
            InvoiceInfo invoiceInfo = invoiceInfoService.lambdaQuery()
                    .eq(InvoiceInfo::getId, 21)
                    .one();

            List<FreightOrderResponse> freightOrderResponseList = new ArrayList<>();

            ArrayList<Map<String, String>> dataList = new ArrayList<>();
            for (int i = 0; i < freightOrderResponseList.size(); i++) {
                FreightOrderResponse freightOrderResponse = freightOrderResponseList.get(0);
                Map<String, String> map = new HashMap<>();
                map.put("companyName",freightOrderResponse.getComName());
                if (freightOrderResponseList.size() / 2 < i){
                    map.put("companyName",freightOrderResponse.getComName() + "1");
                }
                map.put("sendAddr",freightOrderResponse.getSendProvince());
                map.put("arriveAddr",freightOrderResponse.getReceiveProvince());
                map.put("goodsName",freightOrderResponse.getGoodsName());
                map.put("practicalFee",freightOrderResponse.getOrderPrice().toString());
                dataList.add(map);
            }
            WriteSheet writeSheet = EasyExcel.writerSheet()
                    // 合并的單元格 并且將需要合并的那一列數(shù)據(jù)傳入
                    .registerWriteHandler(new CustomMergeStrategy(dataList.stream().map(map -> map.get("companyName")).collect(Collectors.toList()), 0))
                    .build();
            // 這里注意 入?yún)⒂昧薴orceNewRow 代表在寫入list的時(shí)候不管list下面有沒有空行 都會創(chuàng)建一行,然后下面的數(shù)據(jù)往后移動。默認(rèn) 是false,會直接使用下一行,如果沒有則創(chuàng)建。
            // forceNewRow 如果設(shè)置了true,有個(gè)缺點(diǎn) 就是他會把所有的數(shù)據(jù)都放到內(nèi)存了,所以慎用
            // 簡單的說 如果你的模板有l(wèi)ist,且list不是最后一行,下面還有數(shù)據(jù)需要填充 就必須設(shè)置 forceNewRow=true 但是這個(gè)就會把所有數(shù)據(jù)放到內(nèi)存 會很耗內(nèi)存
            // 如果數(shù)據(jù)量大 list不是最后一行 參照下一個(gè)

            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            excelWriter.fill(dataList, fillConfig, writeSheet);
            Map<String, Object> map = MapUtils.newHashMap();
            BigDecimal reduce = freightOrderResponseList.stream().map(obj -> obj.getOrderPrice() != null ? obj.getOrderPrice() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add);
            map.put("practicalFee", reduce);
            map.put("customName", invoiceInfo.getCustomName());
            map.put("sellerComName", invoiceInfo.getSellerComName());
            excelWriter.fill(map, writeSheet);
            excelWriter.finish();
        }
    }

最終效果 :?

easyExcel 模版導(dǎo)出 中間數(shù)據(jù)縱向延伸,并且對指定列進(jìn)行合并,java,服務(wù)器,前端

參考資料 :?

官方文檔 :?

填充Excel | Easy Excel

合并代碼參考 :?

https://www.cnblogs.com/monianxd/p/16359369.html文章來源地址http://www.zghlxwxcb.cn/news/detail-847303.html

到了這里,關(guān)于easyExcel 模版導(dǎo)出 中間數(shù)據(jù)縱向延伸,并且對指定列進(jìn)行合并的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【EasyExcel】導(dǎo)出excel凍結(jié)表頭和凍結(jié)指定列并支持篩選器

    【EasyExcel】導(dǎo)出excel凍結(jié)表頭和凍結(jié)指定列并支持篩選器

    需求背景: ? ? ? ? 導(dǎo)出excel的同時(shí)凍結(jié)表頭和前兩列基礎(chǔ)信息,方便導(dǎo)出后用戶查看信息。 一、技術(shù)選型: ? ? ? ? easyExcel的自定義寫策略處理:SheetWriteHandler 二、方案設(shè)計(jì):(基于實(shí)現(xiàn) SheetWriteHandler 接口) ? ? ? ? 1、重寫afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder,

    2024年01月24日
    瀏覽(31)
  • 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)題類 這個(gè)類控制數(shù)據(jù)之前的顯示內(nèi)容 效果 2022-10-28 亂碼解決 因?yàn)槲募?/p>

    2023年04月09日
    瀏覽(23)
  • EasyExcel快速導(dǎo)出 100W 數(shù)據(jù)

    導(dǎo)出是后臺管理系統(tǒng)的常用功能,當(dāng)數(shù)據(jù)量特別大的時(shí)候會內(nèi)存溢出和卡頓頁面,曾經(jīng)自己封裝過一個(gè)導(dǎo)出,采用了分批查詢數(shù)據(jù)來避免內(nèi)存溢出和使用SXSSFWorkbook方式緩存數(shù)據(jù)到文件上以解決下載大文件EXCEL卡死頁面的問題。 不過一是存在封裝不太友好使用不方便的問題,二

    2024年01月16日
    瀏覽(24)
  • 數(shù)據(jù)導(dǎo)入導(dǎo)出(POI以及easyExcel)

    數(shù)據(jù)導(dǎo)入導(dǎo)出(POI以及easyExcel)

    ????????將一些數(shù)據(jù)庫信息導(dǎo)出為Excel表格 ????????將Excel表格數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫 ? ? ? ? 大量數(shù)據(jù)的導(dǎo)入導(dǎo)出操作 常?的解決?案為: Apache POI 與阿?巴巴 easyExcel Apache POI 是基于 Office Open XML 標(biāo)準(zhǔn)( OOXML )和 Microsoft 的 OLE 2 復(fù)合?檔 格式( OLE2 )處理各種?件格式的

    2024年02月13日
    瀏覽(21)
  • Spring boot easyexcel 實(shí)現(xiàn)復(fù)合數(shù)據(jù)導(dǎo)出、按模塊導(dǎo)出

    Spring boot easyexcel 實(shí)現(xiàn)復(fù)合數(shù)據(jù)導(dǎo)出、按模塊導(dǎo)出

    場景: 導(dǎo)出數(shù)據(jù)為1對多的復(fù)合數(shù)據(jù) 一個(gè)模塊是一條數(shù)據(jù),直接填充數(shù)據(jù)無法實(shí)現(xiàn) 如圖: 紅框內(nèi)為一條數(shù)據(jù)(1對多),下方箭頭指向?yàn)榈诙l數(shù)據(jù) 如果直接填充,只能填充第一條,第二條就沒辦法了。 由于多行都包含許多,固定表頭,只能走填充路線,怎么實(shí)現(xiàn)呢 實(shí)現(xiàn)思路

    2024年02月07日
    瀏覽(19)
  • 基于EasyExcel的數(shù)據(jù)導(dǎo)入導(dǎo)出(復(fù)制可用)

    基于EasyExcel的數(shù)據(jù)導(dǎo)入導(dǎo)出(復(fù)制可用)

    目錄 ? 前言: 新建SpringBoot項(xiàng)目,引入下面的依賴 數(shù)據(jù)導(dǎo)入導(dǎo)出執(zhí)行原理和思路: 用戶端邏輯: 后臺開發(fā)邏輯: 代碼實(shí)現(xiàn) 下拉框策略 批注策略 數(shù)據(jù)讀取監(jiān)聽 Excel工具類 創(chuàng)建導(dǎo)入數(shù)據(jù)模板類 創(chuàng)建數(shù)據(jù)導(dǎo)出模板 Web接口 結(jié)果展示 模板下載 數(shù)據(jù)導(dǎo)入 數(shù)據(jù)導(dǎo)出 ? 代碼復(fù)制粘貼

    2024年02月05日
    瀏覽(26)
  • easyexcel大數(shù)據(jù)多線程讀取后導(dǎo)出

    easyexcel大數(shù)據(jù)多線程讀取后導(dǎo)出

    最近在研究大數(shù)據(jù)的導(dǎo)入導(dǎo)出,由此想到了在管理系統(tǒng)中,excel導(dǎo)入導(dǎo)出都是常見操作,故我的操作由此開始。 首先是選擇適合的工具類,alibaba開源的easyexcel比較好,處理大數(shù)據(jù)效率較高,故選用此工具,這是easyexcel官網(wǎng) 1.導(dǎo)入maven依賴 2.配置好相應(yīng)的實(shí)體類 Timestamp需要類型

    2024年02月11日
    瀏覽(8)
  • 使用Apache POI數(shù)據(jù)導(dǎo)出及EasyExcel進(jìn)行十萬、百萬的數(shù)據(jù)導(dǎo)出

    Apache POI 是基于 Office Open XML 標(biāo)準(zhǔn)( OOXML )和 Microsoft 的 OLE 2 復(fù)合?檔 格式( OLE2 )處理各種?件格式的開源項(xiàng)?。 簡??之,您可以使? Java 讀寫 MS Excel ?件,可以使? Java 讀寫 MS Word 和 MS PowerPoint ?件。 1.HSSF - 提供讀寫 Microsoft Excel XLS 格式 (Microsoft Excel 97 (-2003)) 檔案

    2024年02月15日
    瀏覽(21)
  • 使用easyexcel填充模板數(shù)據(jù),并導(dǎo)出excel

    使用easyexcel填充模板數(shù)據(jù),并導(dǎo)出excel

    導(dǎo)出excel功能非常場景,本片文章記錄如何使用模板填充數(shù)據(jù)后再導(dǎo)出。因直接導(dǎo)出excel數(shù)據(jù)樣式不符合要求,所以做了模板填充然后再導(dǎo)出excel。 效果如下: 注意:列表數(shù)據(jù)變量名前面要寫點(diǎn){.id},如果單條數(shù)據(jù)可以不寫。 使用表單提交: 實(shí)體代碼: controller代碼: 只對je

    2024年03月11日
    瀏覽(23)
  • SpringBoot使用EasyExcel批量導(dǎo)出500萬數(shù)據(jù)

    SpringBoot使用EasyExcel批量導(dǎo)出500萬數(shù)據(jù)

    記錄下學(xué)習(xí)SpringBoot使用EasyExcel批量導(dǎo)出百萬數(shù)據(jù)。留著以后備用。 本地環(huán)境mysql安裝的5.7版本,項(xiàng)目使用jdk1.8版本,項(xiàng)目使用的mysql驅(qū)動版本為8.0版本。 這一篇博客內(nèi)容代碼基于我的這篇博客: SpringBoot使用mybatis批量新增500萬數(shù)據(jù)到mysql數(shù)據(jù)庫Demo,在自己這篇博客的代碼上做

    2024年02月12日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包