导出execl工具类

JAVA导出execl工具类

package com.cgnpc.hp.utils;



import com.alibaba.excel.EasyExcel;

import com.alibaba.excel.ExcelWriter;

import com.alibaba.excel.support.ExcelTypeEnum;

import com.alibaba.excel.write.builder.ExcelWriterBuilder;

import com.alibaba.excel.write.handler.AbstractCellWriteHandler;

import com.alibaba.excel.write.metadata.WriteSheet;

import com.alibaba.excel.write.metadata.fill.FillConfig;

import lombok.extern.slf4j.Slf4j;

import org.apache.http.annotation.Contract;

import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletResponse;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;



/************************************************************

 * 用途说明:  EasyExcel 工具类

 ************************************************************/

@Slf4j

public class EasyExcelUtil {

    //设置最大导出条数

    public static final int MAX_ROW = 5000;



    /*********************************

     * @Author

     * @Date 2021/5/14 10:57

     * 用途说明: 导出excel类型为xlsx

     * 参数说明 params

     * @param dataList : 导出数据

     * @param fileName  : 导出EXCEL名称

     * @param response : response

     * @param sheetName : sheet页名称

     * 返回值说明:

     ***********************************/

    public static <T> void exportSingleSheetExcel(HttpServletResponse response,

                                                  List<T> dataList,

                                                  Class clazz,

                                                  String fileName,

                                                  String sheetName,String template) throws Exception {

        List exportList = new ArrayList();

        if(dataList.size() < 0){

            throw new Exception("无数据");

        }else if(dataList.size() > MAX_ROW){

            //截取最大长度

            dataList = dataList.subList(0, MAX_ROW);

        }

        if(dataList.size() > 0 ){

        	//如果类型不对应  进行转换

            if(!(dataList.get(0).getClass() == clazz)){

                dataList.forEach(n -> {

                    exportList.add(ObjUtil.toBean((Map<String, ?>) n, clazz));

                });

            }

        }



        if(StringUtils.isEmpty(fileName)){

            fileName = "数据导出";

        }

        if(StringUtils.isEmpty(sheetName)){

            sheetName = "sheet1";

        }



        //转码

        fileName = new String(fileName.getBytes("utf-8"), "ISO8859-1");

        OutputStream os = response.getOutputStream();

        response.setCharacterEncoding("UTF-8");

        response.setContentType("application/vnd.ms-excel");

        //防止中文乱码

        response.setHeader("Content-Disposition", "attachment;filename="+ fileName + ".xlsx");



//        ExcelWriterBuilder builder = EasyExcel.write(os, clazz).withTemplate(template);

//        builder.excelType(ExcelTypeEnum.XLSX);

//        builder.autoCloseStream(true);

//        builder.sheet(sheetName);

//        FillConfig b= FillConfig.builder().forceNewRow(true).build();

//        ExcelWriter workbook=builder.build();

//        WriteSheet sheet=EasyExcel.writerSheet().build();

//        workbook.fill(dataList,b,sheet);

//        workbook.finish();

        EasyExcel.write(os, clazz).withTemplate(template)

                .excelType(ExcelTypeEnum.XLSX)//导出excel类型为xlsx

                .autoCloseStream(true)

                .sheet(sheetName)

                .doFill(dataList);



        os.flush();

        os.close();



    }



    public static <T> void exportSingleSheetExcel(HttpServletResponse response,

                                                  List<T> dataList,

                                                  Class clazz,

                                                  String fileName,

                                                  String sheetName, String template, AbstractCellWriteHandler abstractCellWriteHandler) throws Exception {

        List exportList = new ArrayList();

        if(dataList.size() < 0){

            throw new Exception("无数据");

        }else if(dataList.size() > MAX_ROW){

            //截取最大长度

            dataList = dataList.subList(0, MAX_ROW);

        }

        if(dataList.size() > 0 ){

            //如果类型不对应  进行转换

            if(!(dataList.get(0).getClass() == clazz)){

                dataList.forEach(n -> {

                    exportList.add(ObjUtil.toBean((Map<String, ?>) n, clazz));

                });

            }

        }



        if(StringUtils.isEmpty(fileName)){

            fileName = "数据导出";

        }

        if(StringUtils.isEmpty(sheetName)){

            sheetName = "sheet1";

        }



        //转码

        fileName = new String(fileName.getBytes("utf-8"), "ISO8859-1");

        OutputStream os = response.getOutputStream();

        response.setCharacterEncoding("UTF-8");

        response.setContentType("application/vnd.ms-excel");

        //防止中文乱码

        response.setHeader("Content-Disposition", "attachment;filename="+ fileName + ".xlsx");



        ExcelWriterBuilder builder = EasyExcel.write(os, Contract.class).withTemplate(template);

        builder.excelType(ExcelTypeEnum.XLSX);

        builder.autoCloseStream(true);

        builder.sheet(sheetName);

        builder.registerWriteHandler(abstractCellWriteHandler);

        FillConfig b= FillConfig.builder().forceNewRow(true).build();

        ExcelWriter workbook=builder.build();

        WriteSheet sheet=EasyExcel.writerSheet().build();

        workbook.fill(dataList,b,sheet);

        workbook.finish();



        os.flush();

        os.close();



    }

//    /**

//     * 文件摸板下载

//     * @param response

//     * @param path 文件路径

//     * @param fileName 文件名称

//     * @throws IOException

//     */

//    public static void downloadExcelTemplate(HttpServletResponse response, String path, String fileName) throws IOException {

//        BufferedInputStream bis = null;

//        try {

            ClassPathResource classPathResource = new ClassPathResource(path);

            InputStream inputStream = classPathResource.getInputStream();

//            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path);

//            ServletOutputStream out = null;

//            bis = new BufferedInputStream(inputStream);

//            int buffer = 1024 * 10;

//            byte[] data = new byte[buffer];

//            //将文件名称进行转义,否则会造成中文显示异常的问题

//            fileName = URLEncoder.encode(fileName, "UTF-8");

//            response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);

//            int read;

//            out = response.getOutputStream();

//            while ((read = bis.read(data)) != -1) {

//                out.write(data, 0, read);

//            }

//            out.flush();

//        } finally {

//            if(bis != null){

//                bis.close();

//            }

//        }

//    }



}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏女人净画饼

原创辛苦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值