亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java如何利用Easyexcel動態(tài)導出表頭列

 更新時間:2025年04月23日 09:39:17   作者:C__jx  
這篇文章主要介紹了Java利用Easyexcel動態(tài)導出表頭列的實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java利用Easyexcel動態(tài)導出表頭列

需要定義動態(tài)導出的表頭列集合

其中 fieldName 為要導出的字段名稱 也就是 數(shù)據對象 中與之對應的字段名稱

headName 為與字段對應的表頭

(我這里默認用的就是導出表頭集合中字段排序就是導出的表頭排序 如有需要,可以自己定義導出表頭順序)

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author: chenjiaxiang
 * @create: 2023/4/11 11:05
 **/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ExcelHeader {

    /**
     * 要導出的字段名稱
     */
    private String fieldName;

    /**
     * 要導出的表頭名稱
     */
    private String headName;
}

導出util類

直接上代碼

import cn.hutool.core.util.ReflectUtil;
import com.alibaba.excel.EasyExcel;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 動態(tài)導出 exl
 * @author: chenjiaxiang
 * @create: 2023/4/11 16:20
 **/
@Slf4j
public class EasyExcelUtils {

    /**
     * 動態(tài)導出exl
     *
     * @param headers  要導出的頭集合
     * @param dataList 數(shù)據集合
     */
    public static <T> void dynamicExportExcel(List<ExcelHeader> headers, List<T> dataList, HttpServletResponse response) {
        long startTime = System.currentTimeMillis();
        List<List<T>> allList = new ArrayList<>();
        for (T detail : dataList) {
            allList.addAll(EasyExcelUtils.dataList(headers, detail));
        }
        try (ServletOutputStream outputStream = response.getOutputStream()) {
            EasyExcel.write(outputStream).head(EasyExcelUtils.headers(headers))
                    //文件樣式
                    .registerWriteHandler(new CellStyle())
                    .sheet("sheet").doWrite(allList);
        } catch (IOException e) {
            log.error("生成動態(tài)EXL失敗,字段", e);
        }
        long endTime = System.currentTimeMillis();
        log.info("動態(tài)導出耗時:{}", endTime - startTime);
    }

    //excel表頭
    public static List<List<String>> headers(List<ExcelHeader> excelHeaders) {
        List<List<String>> headers = new ArrayList<>();
        for (ExcelHeader header : excelHeaders) {
            List<String> head = new ArrayList<>();
            head.add(header.getHeadName());
            headers.add(head);
        }
        return headers;
    }

    /**
     * 要導出的字段
     *
     * @param exportFields 表頭集合
     * @param obj          數(shù)據對象
     * @return 集合
     */
    @SneakyThrows
    public static <T> List<List<T>> dataList(List<ExcelHeader> exportFields, T obj) {
        List<List<T>> list = new ArrayList<>();
        List<T> data = new ArrayList<>();
        List<String> propList = exportFields.stream().map(ExcelHeader::getFieldName).collect(Collectors.toList());
        //先根據反射獲取實體類的class對象
        Class<?> objClass = obj.getClass();
        //設置實體類屬性的集合
        Field[] fields = ReflectUtil.getFields(objClass);
        for (String prop : propList) {
            //循環(huán)實體類對象集合
            for (Field field : fields) {
                field.setAccessible(true);
                //判斷實體類屬性跟特定字段集合名是否一樣
                if (field.getName().equals(prop)) {
                    T object = (T) field.get(obj);
                    //獲取屬性對應的值
                    data.add(object);
                }
            }
        }
        list.add(data);
        return list;
    }

}

CellStyle()是設置的默認樣式

import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;

import java.util.List;

/**
 * @author: chenjiaxiang
 * @create: 2022-08-11 14:53
 **/
public class CellStyle extends AbstractColumnWidthStyleStrategy {

    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head,
                                  Integer relativeRowIndex, Boolean isHead) {
        // 簡單設置
        Sheet sheet = writeSheetHolder.getSheet();
        sheet.setColumnWidth(cell.getColumnIndex(), 5000);
    }

}

運行代碼

 @PostMapping("/exlOut")
    public void exlOut(HttpServletResponse response) {
        //導出字段集合
        List<ExcelHeader> excelHeaders = Arrays.asList(new ExcelHeader("phone", "手機號"), new ExcelHeader("sexStr", "性別"));
        //數(shù)據集合
        List<GetSchoolExpertsDeriveExlVo> getSchoolExpertsDeriveExlVos = Arrays.asList(new GetSchoolExpertsDeriveExlVo("男", "1231231"), new GetSchoolExpertsDeriveExlVo("nn", "adadad"));
        EasyExcelUtils.dynamicExportExcel(excelHeaders,getSchoolExpertsDeriveExlVos,response);
    }

導出效果

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java漢字轉拼音案例詳解

    Java漢字轉拼音案例詳解

    這篇文章主要介紹了Java漢字轉拼音案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Dapr在Java中的服務調用實戰(zhàn)過程詳解

    Dapr在Java中的服務調用實戰(zhàn)過程詳解

    這篇文章主要為大家介紹了Dapr在Java中的服務調用實戰(zhàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • elasticsearch集群cluster示例詳解

    elasticsearch集群cluster示例詳解

    這篇文章主要為大家介紹了elasticsearch集群cluster示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Springboot實現(xiàn)對配置文件中的明文密碼加密詳解

    Springboot實現(xiàn)對配置文件中的明文密碼加密詳解

    我們在SpringBoot項目當中,會把數(shù)據庫的用戶名密碼等配置直接放在yaml或者properties文件中,這樣維護數(shù)據庫的密碼等敏感信息顯然是有一定風險的。所以本文為大家整理了對配置文件中的明文密碼加密的方法,希望對大家有所幫助
    2023-03-03
  • 詳解Spring中bean生命周期回調方法

    詳解Spring中bean生命周期回調方法

    本篇文章主要介紹了詳解Spring中bean生命周期回調方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Mybatis中resultMap標簽和sql標簽的設置方式

    Mybatis中resultMap標簽和sql標簽的設置方式

    這篇文章主要介紹了Mybatis中resultMap標簽和sql標簽的設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JavaStream將List轉為Map示例

    JavaStream將List轉為Map示例

    這篇文章主要為大家介紹了JavaStream將List轉為Map示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java中JDK動態(tài)代理的超詳細講解

    Java中JDK動態(tài)代理的超詳細講解

    JDK 的動態(tài)代理是基于攔截器和反射來實現(xiàn)的,JDK代理是不需要第三方庫支持的,只需要JDK環(huán)境就可以進行代理,下面這篇文章主要給大家介紹了關于Java中JDK動態(tài)代理的超詳細講解,需要的朋友可以參考下
    2022-10-10
  • 帶你全面認識Java中的異常處理

    帶你全面認識Java中的異常處理

    在你所寫過的代碼中,你已經接觸過一些異常了,我們可以通過一些簡單的代碼讓我們理解一些簡單的異常,下面這篇文章主要給大家介紹了關于Java中異常處理的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 手把手教你SpringBoot整合Mybatis

    手把手教你SpringBoot整合Mybatis

    這篇文章主要介紹了手把手教你SpringBoot整合Mybatis,Mybatis是一款持久化框架,可以幫我們省去大部分jdbc的代碼,需要的朋友可以參考下
    2023-03-03

最新評論