EasyExcel 导出简单Excel工具类

导入依赖

EasyExcel

<!--	easyexcel	-->
		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
        </dependency>

EasyExcel 工具类

import com.alibaba.excel.EasyExcel;
import io.swagger.annotations.Api;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

/**
 * @Auther: ZWeiHao
 * @Date: 2021/11/11 15:23
 * @Description: Excel工具类
 */
@Api(value = "Excel工具类")
public class ExcelUtils {

    private static final Logger log = LoggerFactory.getLogger(ExcelUtils.class);

    private final static String fileName = "D:\\ExportExcel"+"\\" + System.currentTimeMillis() + ".xlsx";

    /**
     * 最简单的动态查询List<Map>导出
     */
    @Test
    public  void testExportListMap() {
        //主表头
        String mainHead="惠农通数据表";

        //表头信息 map中的key就是表头信息

        //导出的数据
        List<Map<String, Object>> exportList = new ArrayList<>();

        //手动添加测试数据(可根据需要从数据库查询)
        Map<String,Object> map = new LinkedHashMap<>();
        map.put("银行名称", "张XX");
        map.put("期间新增项目", 2);
        map.put("期间新增担保总额", "刘德华");
        map.put("期间新增解保项目数", 4);
        map.put("期间新增解保金额", "周星驰");
        map.put("在保项目数", 6);
        map.put("在保余额", "周润发");
        map.put("银行利率", 8);
        exportList.add(map);
        //导出List<Map> 数据格式
        Boolean aBoolean = exportExcel(mainHead, exportList, fileName);

        if(aBoolean){
            System.out.println("生成Excel成功!");
        }

    }


    /**
     *  最简单的实体类导出
     */
    @Test
    public void testExportListEntity(){

        List<DemoData> dataList = new ArrayList<>();
        for(int i = 0; i < 100; i++){
            DemoData demoData = new DemoData();

            demoData.setDate(new Date());
            demoData.setString("周星星"+i);
            demoData.setDoubleData(9.89);
            demoData.setIgnore("不导出字段");
            dataList.add(demoData);
        }

        //实体类封装数据导出
        Boolean aBoolean = exportExcel(dataList, DemoData.class, fileName);

        if(aBoolean){
            System.out.println("Excel生成成功!");
        }
    }

    
    /**
     * 最简单的实体类导出一个sheet中
     * @param list 导出的数据
     * @param tClass 导出数据类型
     * @param pathFileName 保存路径与文件的名字
     * @return true:Excel生成成功 false:Excel 生成过程中发生异常
     */
    public static Boolean exportExcel(List<?> list, Class<?> tClass, String pathFileName){
        try{
            EasyExcel.write(pathFileName,tClass).sheet("模板").doWrite(list);
        }catch (Exception e){
            log.info("导出Excel发生异常:{}",e);
            return false;
        }
        return true;
    }


    /**
     * 最简单的动态查询List<Map>导出一个sheet中
     * @param mainHead 主表头 即:Excel中表的名称
     * @param list 类型 是List<LinkedHashMap>
     * @param pathFileName
     * @return true:Excel生成成功 false:Excel 生成过程中发生异常
     */
    public static Boolean exportExcel(String mainHead, List<Map<String, Object>> list, String pathFileName){

        List<String> headKeys = new ArrayList<>();
        //list.get(0).keySet() 代表整个数据集的key,会变成excel的表头
        headKeys.addAll(list.get(0).keySet());
        try{
            exportListMap(mainHead,headKeys,list,pathFileName);
        }catch (Exception e){
            log.info("导出Excel发生异常:{}",e);
            return false;
        }
        return true;
    }

    /**
     * @param mainHead 主表头 即:Excel中表的名称
     * @param headKeys 表头字段说明
     * @param list 表数据
     * @param pathFileName 保存路径与文件的名字
     */
    public static void exportListMap(String mainHead,List<String> headKeys,  List<Map<String, Object>> list,String pathFileName){

        List<List<String>> hs = new ArrayList<>();
        for (String key : headKeys) {
            hs.add(Arrays.asList(mainHead,key));
        }

        List<List<Object>> list2 = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {

            List<Object> objects = new ArrayList<>();

            Collection<Object> values = list.get(i).values();
            for (Object value : values) {
                if(value != null){
                    objects.add(value.toString());
                }else {
                    objects.add(null);
                }
            }
            list2.add(objects);
        }
        //导出Excel
        EasyExcel.write(pathFileName).head(hs).sheet("模板").doWrite(list2);
    }

}

实体类

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * @Auther: ZWeiHao
 * @Date: 2021/11/12 09:08
 * @Description:
 */
@Data
public class DemoData {

    @ExcelProperty({"主标题","字符串标题"})
    private String string;

    @JsonFormat(timezone="GMT+8")
    @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
    @ExcelProperty({"主标题","日期标题"})
    private Date date;

    @NumberFormat("#.##")
    @ExcelProperty({"主标题","数字标题"})
    private Double doubleData;

    @ApiModelProperty("忽略这个字段")
    @ExcelIgnore
    private String ignore;

//    @ExcelIgnore    此注解表示忽略这个字段
//    @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")  时间格式化注解
//    @NumberFormat("#.##%")  百分比表示
//    @ColumnWidth(50)   设置单元格宽度为50
//    @ExcelProperty(value = "标题", index = 0)   第0列为标题列

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值