excel 导出

package com.clear.waterapi.util;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.clear.waterapi.bean.Result;
import org.springframework.beans.BeanUtils;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;


public class ExportExcelUtils {

    public static  <T> List<T> getModels(List<?> dailyList, Class<T> model) {
        ArrayList<T> res = new ArrayList<>();
        for (int i = 0; i < dailyList.size(); i++) {

            T target = null;
            try {
                target = model.newInstance();
                BeanUtils.copyProperties(dailyList.get(i), target);
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            res.add(target);
        }

        return res;
    }
    public static void export(HttpServletResponse response, List<?> list, String fileName, Class<?> clazz,String sheetName) {
        ServletOutputStream out = null;
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
//        ExcelWriter excelWriter = null;
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            out = response.getOutputStream();
//            WriteSheet writeSheet = EasyExcel.writerSheet("城市小时").build();
            EasyExcel.write(response.getOutputStream()).head(clazz).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .sheet(sheetName).doWrite(list);
        } catch (IOException e) {
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            Result fail = Result.fail();
            try {
                response.getWriter().println(JSON.toJSONString(fail));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
//        excelWriter = EasyExcel.write(fileName, clazz).build();
        // 这里注意 如果同一个sheet只要创建一次

        //设置自适应宽度
//        writeSheet.
        // 第一个 sheet 名称
//        sheet.setSheetName("sheet1");

        //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
//        try {
//            response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
//        writer.finish();
//        response.setContentType("multipart/form-data");
//        response.setCharacterEncoding("utf-8");
//        try {
//            if (out != null) {
//                out.flush();
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
    }
    public static void exportForCustomHead(List<List<String>> head,HttpServletResponse response, List<?> list, String fileName, Class<?> clazz,String sheetName) {
        ServletOutputStream out = null;
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
//        ExcelWriter excelWriter = null;
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            out = response.getOutputStream();
//            WriteSheet writeSheet = EasyExcel.writerSheet("城市小时").build();
            EasyExcel.write(response.getOutputStream()).head(head).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .sheet(sheetName).doWrite(list);
        } catch (IOException e) {
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            Result fail = Result.fail();
            try {
                response.getWriter().println(JSON.toJSONString(fail));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
//        excelWriter = EasyExcel.write(fileName, clazz).build();
        // 这里注意 如果同一个sheet只要创建一次

        //设置自适应宽度
//        writeSheet.
        // 第一个 sheet 名称
//        sheet.setSheetName("sheet1");

        //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
//        try {
//            response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
//        writer.finish();
//        response.setContentType("multipart/form-data");
//        response.setCharacterEncoding("utf-8");
//        try {
//            if (out != null) {
//                out.flush();
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
    }
    public static void exportForOneOfMang(HttpServletResponse response, List<? extends BaseRowModel> list, String fileName, Class<? extends BaseRowModel> clazz, int sheetIndex, String sheetName, ExcelWriter writer) {
        ServletOutputStream out = null;
        try {
            out = response.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Sheet sheet = new Sheet(1, 0, clazz);
        //设置自适应宽度
        sheet.setAutoWidth(Boolean.TRUE);
        // 第一个 sheet 名称
        sheet.setSheetName(sheetName);
        sheet.setSheetNo(sheetIndex);
        writer.write(list, sheet);
        //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
//


    }

    public static void setResponse(HttpServletResponse response, String fileName, ExcelWriter writer){
        ServletOutputStream out = null;
        try {
            out = response.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        writer.finish();
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("utf-8");
        try {
            if (out != null) {
                out.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*
     * @Description 自己拼装表头和数据导出excel
     * @param response
     * @param nameforFile excel名称
     * @param sheetName sheet页名称
     * @param headTitles 表头
     * @param data 数据
     * @Return void
     * @Author guoxy
     * @Date 2021/6/3 14:59
     **/
    public static void customExport(HttpServletResponse response,String nameforFile,String sheetName,List<List<String>> headTitles,List<List<Object>> data){

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = null;
        try {
            fileName = URLEncoder.encode(nameforFile, "UTF-8").replaceAll("\\+", "%20");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        try {
            EasyExcel.write(response.getOutputStream()).head(headTitles).sheet(sheetName).doWrite(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
//    public static void export(HttpServletResponse response, List<? extends BaseRowModel> list, String fileName, Class<? extends BaseRowModel> clazz) {
//        ServletOutputStream out = null;
//        try {
//            out = response.getOutputStream();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
//        Sheet sheet = new Sheet(1, 0, clazz);
//        //设置自适应宽度
//        sheet.setAutoWidth(Boolean.TRUE);
//        // 第一个 sheet 名称
//        sheet.setSheetName("sheet1");
//        writer.write(list, sheet);
//        //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
//        try {
//            response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + ".xlsx");
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
//        writer.finish();
//        response.setContentType("multipart/form-data");
//        response.setCharacterEncoding("utf-8");
//        try {
//            if (out != null) {
//                out.flush();
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值