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

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

這篇具有很好參考價(jià)值的文章主要介紹了【EasyExcel】導(dǎo)出excel凍結(jié)表頭和凍結(jié)指定列并支持篩選器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

需求背景:

? ? ? ? 導(dǎo)出excel的同時(shí)凍結(jié)表頭和前兩列基礎(chǔ)信息,方便導(dǎo)出后用戶查看信息。

一、技術(shù)選型:

? ? ? ? easyExcel的自定義寫策略處理:SheetWriteHandler

二、方案設(shè)計(jì):(基于實(shí)現(xiàn) SheetWriteHandler 接口)

? ? ? ? 1、重寫afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder)方法

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

? ? ? ? 2、通過?writeSheetHolder.getSheet() 獲取 sheet,通過 sheet.createFreezePane() 方法設(shè)置導(dǎo)出excel指定凍結(jié)行和列,通過?sheet.setAutoFilter() 給指定導(dǎo)出的excel單元格設(shè)置自動(dòng)篩選器.

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

三、代碼實(shí)現(xiàn):

3.1:pom.xml
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.2</version>
</dependency>
3.2: API
 @ApiOperation(value = "導(dǎo)出")
 @GetMapping(value = "/export")
 public void exportExcel(HttpServletResponse response,@RequestBody TestParam param) {
        service.export(response, param);
 }
3.3:工具類 IEasyExcelServicey
import com.alibaba.excel.write.handler.WriteHandler;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author c
 */
public interface IEasyExcelService {
    /**
     * 導(dǎo)出excel方法
     *
     * @param exportData 需要導(dǎo)出的數(shù)據(jù)
     * @param response   response
     * @param tClass     導(dǎo)出excel的字段實(shí)體類
     * @param fileName   文件名字
     * @param sheetName  sheet名字
     */
    <T> void exportExcel(List<T> exportData, HttpServletResponse response, Class<T> tClass, String fileName, String sheetName);
    /**
     * 導(dǎo)出excel方法 (攜帶自定義策略)
     * @param exportData 需要導(dǎo)出的數(shù)據(jù)
     * @param response HttpServletResponse
     * @param tClass 導(dǎo)出excel的字段實(shí)體類
     * @param fileName 文件名字
     * @param sheetName sheet名字
     * @param writeHandler 自定義策略(可擴(kuò)展多個(gè))
     * @param <T> T
     */
    <T> void exportExcelWithHandler(List<T> exportData, HttpServletResponse response, Class<T> tClass, String fileName, String sheetName, WriteHandler writeHandler);
}

?工具類:EasyExcelServiceImpl

@Slf4j
public class EasyExcelServiceImpl implements IEasyExcelService {

    /**
     * 本地轉(zhuǎn):response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEncoder + ".xlsx");
     * @param exportData 需要導(dǎo)出的數(shù)據(jù)
     * @param response   response
     * @param tClass     導(dǎo)出excel的字段實(shí)體類
     * @param fileName   文件名字
     * @param sheetName  sheet名字
     * @param <T> T
     */
    @Override
    public <T> void exportExcel(List<T> exportData, HttpServletResponse response, Class<T> tClass, String fileName, String sheetName){
        try{
            // 使用swagger 會(huì)導(dǎo)致各種問題,直接用瀏覽器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // fileName encoder
            String fileNameEncoder = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEncoder + ".xlsx");
            response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            // write to excel
            EasyExcelFactory.write(response.getOutputStream(), tClass)
                    .autoCloseStream(Boolean.FALSE)
                    .sheet(sheetName)
                    .doWrite(exportData);
        }catch (Exception e){
            log.error("EasyExcelServiceImpl->exportExcel error, message is :{}", e.getMessage());
        }
    }

    @Override
    public <T> void exportExcelWithHandler(List<T> exportData, HttpServletResponse response, Class<T> tClass, String fileName, String sheetName, WriteHandler writeHandler){
        try{
            // 使用swagger 會(huì)導(dǎo)致各種問題,直接用瀏覽器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // fileName encoder
            String fileNameEncoder = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEncoder + ".xlsx");
            response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            // write to excel
            EasyExcelFactory.write(response.getOutputStream(), tClass)
                    .autoCloseStream(Boolean.FALSE)
                    // 自定義策略(支持?jǐn)U展多個(gè))
                    .registerWriteHandler(writeHandler)
                    .sheet(sheetName)
                    .doWrite(exportData);
        }catch (Exception e){
            log.error("EasyExcelServiceImpl->exportExcel error, message is :{}", e.getMessage());
        }
    }


}
3.4: 自定義Handle:(自定義設(shè)置導(dǎo)出excel設(shè)置凍結(jié)列和列以及是否自動(dòng)加篩選器)
/**
 * easyExcel:export handle
 * freeze row and col with set auto filter range
 * @author c
 * @date: 2024-1-5 13:44:26
 */
public class FreezeRowColHandler implements SheetWriteHandler {

    private final FreezeRowColOptions options;

    public FreezeRowColHandler(FreezeRowColOptions options) {
        this.options = options;
    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Sheet sheet = writeSheetHolder.getSheet();
        sheet.createFreezePane(options.getColSplit(), options.getRowSplit(), options.getLeftmostColumn(), options.getTopRow());
        if (null != options.getAutoFilterRange()) {
            sheet.setAutoFilter(CellRangeAddress.valueOf(options.getAutoFilterRange()));
        }
    }

}
參數(shù):FreezeRowColOptions
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FreezeRowColOptions {
    /**
     * Horizontal position of split
     */
    private Integer colSplit;
    /**
     * Vertical position of split
     */
    private Integer rowSplit;
    /**
     * Left column visible in right pane
     */
    private Integer leftmostColumn;
    /**
     * Top row visible in bottom pane
     */
    private Integer topRow;
    /**
     * auto filter range
     */
    private String autoFilterRange;
}
參數(shù)解釋和示例:
四個(gè)參數(shù)分別代表:
colSplit:表示要凍結(jié)的列數(shù);
rowSplit:表示要凍結(jié)的行數(shù);
leftmostColumn:表示被固定列右邊第一列的列號;
topRow:表示被固定行下邊第一列的行號;

舉例:
CreateFreezePane(0,1,0,1):凍結(jié)第一行,凍結(jié)行下側(cè)第一行的左邊框顯示“2”
CreateFreezePane(1,0,1,0):凍結(jié)第一列,凍結(jié)列右側(cè)的第一列為B列
CreateFreezePane(2,0,5,0):凍結(jié)左側(cè)兩列,凍結(jié)列右側(cè)的第一列為F列

可以自定義 FreezeRowColConstant 方便維護(hù),如下

/**
 * handle constant:export FreezeRowColConstant
 * freeze row and col with set auto filter range constant
 * @author c
 * @date: 2024-1-5 14:22:21
 */
public class FreezeRowColConstant {
    /**
     * TEST_ONE  export
     */
    public static final FreezeRowColOptions TEST_ONE = new FreezeRowColOptions(2, 2, 0, 0, "A2:BH2");
    /**
     * TEST_TWO  export
     */
    public static final FreezeRowColOptions TEST_TWO = new FreezeRowColOptions(2, 2, 0, 0, "A2:AC2");
    /**
     * TEST_THREE  export
     */
    public static final FreezeRowColOptions TEST_THREE = new FreezeRowColOptions(2, 2, 0, 0, "A2:T2");
}

ITestExportService:(這里可以根據(jù)自己的業(yè)務(wù)進(jìn)行自定義,本文定義這個(gè)是因?yàn)樵谕粋€(gè)業(yè)務(wù)里面有幾個(gè)類似的導(dǎo)出可以共用這個(gè)導(dǎo)出接口)

public interface ITestExportService {
    /**
     * export data
     * @param response HttpServletResponse
     * @param param export common param
     * @throws BaseException ex
     */
    default void exportData(HttpServletResponse response, TestParam param) {}
}

下面給出其中一個(gè)導(dǎo)出的實(shí)現(xiàn)方法:

@Service
@Slf4j
public class TestOneServiceImpl implements ITestExportService {

    private static final String FILE_NAME_TEST = "測試";
    private final IEasyExcelService easyExcelService;
  
    public TestOneServiceImpl (IEasyExcelService easyExcelService) {
        this.easyExcelService = easyExcelService; 
    }

    @Override
    public void exportData(HttpServletResponse response, TestParam param) {
        // 這里是根據(jù)查詢參數(shù)param獲取需要導(dǎo)出的數(shù)據(jù)
        // get data
        List<DemoExcelData> data = this.ExportData(param);
        // export:調(diào)用 exportExcelWithHandler 導(dǎo)出
        easyExcelService.exportExcelWithHandler(data, response, DemoExcelData.class, FILE_NAME_TEST, FILE_NAME_TEST,
                new FreezeRowColHandler(FreezeRowColConstant.TEST_ONE));
    }
}

實(shí)現(xiàn)效果:(都加上了自動(dòng)篩選器?)

下面是示例,在TestOneServiceImpl 方法中調(diào)用exportExcelWithHandler方法的時(shí)候?qū)嶋H用的是FreezeRowColConstant.TEST_ONE,其中?FreezeRowColConstant.TEST_ONE 設(shè)置的是?new FreezeRowColOptions(2, 2, 0, 0, "A2:BH2"),其含義是:

? ? ? ? 第一個(gè)參數(shù):表示凍結(jié)前兩行

? ? ? ? 第二個(gè)參數(shù):表示凍結(jié)前兩列?

????????"A2:BH2":表示單元格"A2:BH2"區(qū)間設(shè)置添加自動(dòng)篩選器

表頭固定效果:

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

?前兩列固定效果:

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

相關(guān)文章推薦:

【EasyExcel】導(dǎo)出excel并支持自定義設(shè)置數(shù)據(jù)行背景顏色等_easyexcel rrg背景-CSDN博客

?? ? ? ???????????????????????????如果對你有幫助,給博主一個(gè)免費(fèi)的點(diǎn)贊以示鼓勵(lì)
????????????????????????????????????????????????歡迎各位??點(diǎn)贊??評論收藏??文章來源地址http://www.zghlxwxcb.cn/news/detail-821492.html

到了這里,關(guān)于【EasyExcel】導(dǎo)出excel凍結(jié)表頭和凍結(jié)指定列并支持篩選器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(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òng)態(tài)表頭及導(dǎo)出

    EasyExcel解析動(dòng)態(tài)表頭及導(dǎo)出

    前言 excel文件導(dǎo)入及導(dǎo)出,是日常開發(fā)中經(jīng)常遇到的需求。本次筆者以EasyExcel為例,針對在項(xiàng)目中遇到的 動(dòng)態(tài)表頭解析及導(dǎo)出 的場景,詳細(xì)介紹具體的代碼實(shí)現(xiàn)過程。 參考地址 https://github.com/alibaba/easyexcel 前端下載 模板下載 excel文件導(dǎo)入功能,常常需要進(jìn)行模板下載,在

    2023年04月09日
    瀏覽(27)
  • 使用easyexcel 導(dǎo)出多級表頭demo

    使用easyexcel 導(dǎo)出多級表頭demo

    先看效果: 1、引入maven依賴 2、實(shí)體類 3、web導(dǎo)出 controller 4、在攔截器中對表頭的樣式進(jìn)行自定義的覆蓋

    2024年01月18日
    瀏覽(33)
  • Java 利用Easyexcel動(dòng)態(tài)導(dǎo)出表頭列

    Java 利用Easyexcel動(dòng)態(tài)導(dǎo)出表頭列

    其中 fieldName 為要導(dǎo)出的字段名稱 也就是 數(shù)據(jù)對象 中與之對應(yīng)的字段名稱 headName 為與字段對應(yīng)的表頭(我這里默認(rèn)用的就是導(dǎo)出表頭集合中字段排序就是導(dǎo)出的表頭排序 如有需要,可以自己定義導(dǎo)出表頭順序) 導(dǎo)出util類,直接上代碼 其中? CellStyle() 是設(shè)置的默認(rèn)樣式?

    2024年02月11日
    瀏覽(20)
  • EasyExcel復(fù)雜表頭導(dǎo)出(一對多)升級版

    EasyExcel復(fù)雜表頭導(dǎo)出(一對多)升級版

    ????????在之前寫的?EasyExcel復(fù)雜表頭導(dǎo)出(一對多)的博客的結(jié)尾,受限于當(dāng)時(shí)的能力和精力,留下一些問題及展望?,F(xiàn)在寫下此博客,目的就是解決之前遺留的問題。 ? ? ? ? 背景介紹,見上述鏈接指向的博客,這里主要通過 自定義攔截器 的形式來完美解決。 對于圖

    2024年02月06日
    瀏覽(20)
  • JAVA(EasyExcel)通過遠(yuǎn)程調(diào)用模板 導(dǎo)出數(shù)據(jù) 復(fù)雜表頭

    JAVA(EasyExcel)通過遠(yuǎn)程調(diào)用模板 導(dǎo)出數(shù)據(jù) 復(fù)雜表頭

    最近接手一個(gè)需求,單組數(shù)據(jù)的顯示,也有多組數(shù)據(jù)的顯示,查了好多文章,都不是很明白.但是這篇文章和我的需求差不多非常相似(鏈接放在文末),根據(jù)這篇文章然后將自己的實(shí)現(xiàn)過程記錄了下來,以防之后再用到. 這是我需要導(dǎo)出的excel格式 開頭是單條數(shù)據(jù)的展示 之后是多條數(shù)據(jù)

    2024年02月03日
    瀏覽(32)
  • hutool 導(dǎo)出復(fù)雜表頭excel

    hutool 導(dǎo)出復(fù)雜表頭excel

    假如已這樣的表頭導(dǎo)出數(shù)據(jù) ?1.把包含表頭的excel添加到項(xiàng)目資源目錄 ?2.編寫代碼讀取表頭所在sheet,并且加入需導(dǎo)出的數(shù)據(jù)

    2024年02月13日
    瀏覽(19)
  • EasyExcel指定導(dǎo)出字段的日期格式

    1.編寫一個(gè)DateConverter類,指定輸出的日期格式: 2.在導(dǎo)出數(shù)據(jù)的實(shí)體類加上下面的內(nèi)容,DateConverter為上面創(chuàng)建的類: 如此便可將Date類型的屬性導(dǎo)出為指定日期格式的數(shù)據(jù)

    2024年02月15日
    瀏覽(19)
  • POI實(shí)現(xiàn)Excel多行復(fù)雜表頭導(dǎo)出

    POI實(shí)現(xiàn)Excel多行復(fù)雜表頭導(dǎo)出

    1. 定義表頭標(biāo)題 2. 編寫導(dǎo)出/生成Excel工具類 3. 測試 測試結(jié)果

    2024年01月19日
    瀏覽(32)
  • EasyExcel導(dǎo)出Excel文件

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

    2024年02月14日
    瀏覽(25)
  • java poi實(shí)現(xiàn)Excel多級表頭導(dǎo)出

    java poi實(shí)現(xiàn)Excel多級表頭導(dǎo)出

    最近碰到一個(gè)導(dǎo)出,比較繁瑣,也查詢了許多博客,在其中一篇博客的基礎(chǔ)上修改,實(shí)現(xiàn)了最終想要的效果。話不多說,直接上效果圖 1.主代碼: 2.合并單元格 3.設(shè)置表頭單元格的寬度 4.填充數(shù)據(jù)(注:我這里的數(shù)據(jù)格式是ListMapString, Object類型,可以根據(jù)自己的實(shí)際情況來封

    2024年02月03日
    瀏覽(47)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包