EasyExcel实现 动态数据库表Excel导出,并上传文件服务器

EasyExcel实现 动态数据库表Excel导出,并上传文件服务器

  • 背景
    • 参考博客
  • 正文
    • 环境
    • 依赖
    • 工具类
    • 注意参数格式与excel内容对应
  • 20220304 【使用HttpServletResponse 获取输出流】
  • 20220319 【EasyExcel实现多sheet页导出】

背景

和这篇文章的背景一样,POI实现 动态数据库表Excel导出,并上传文件服务器EasyExcel实现 动态数据库表Excel导出,并上传文件服务器_第1张图片
看来个人的感觉真的不行,哈哈哈,本文来使用EasyExcel实现。

参考博客

EasyExcel使用说明

正文

环境

  • SpringBoot 2.1.2.RELEASE
  • JDK 1.8
  • Maven 3.5.0

依赖

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>2.2.7</version>
		</dependency>

工具类

package com.fang.industry.service.common.utils;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.HorizontalAlignment;

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.List;

/**
 * @author: [email protected]
 * @createDate: 2021/6/17 10:22
 */
public class ExportEasyExcelUtil {

    /**
     * 动态导出excel
     * @param head
     * @param body
     * @param outputStream
     * @return java.io.OutputStream
     * @author [email protected]
     * @date 2021/6/17
     */
    public static OutputStream ExportSingleHeadGroupExcel(List<List<String>> head,List<List<String>> body, ByteArrayOutputStream outputStream) {
        EasyExcel.write(outputStream).head(head)
                .registerWriteHandler(setExcelStyle())
                .sheet().doWrite(body);
        return outputStream;
    }



    private static HorizontalCellStyleStrategy setExcelStyle(){
        // 表头策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        WriteFont writeFont=new WriteFont();
        writeFont.setFontName("微软雅黑");
        writeFont.setFontHeightInPoints((short) 11);
        //加粗
        writeFont.setBold(true);
        headWriteCellStyle.setWriteFont(writeFont);
        //内容样式策略
        WriteCellStyle contextWriteeCellStyle=new WriteCellStyle();
        //设置水平居中
        contextWriteeCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
        HorizontalCellStyleStrategy horizontalCellStyleStrategy =
                new HorizontalCellStyleStrategy(headWriteCellStyle,contextWriteeCellStyle);
        return horizontalCellStyleStrategy;
    }


}

然后就是流转换和上传文件服务器,详细请看POI实现 动态数据库表Excel导出,并上传文件服务器,本文就不做详细说明。

注意参数格式与excel内容对应

EasyExcel实现 动态数据库表Excel导出,并上传文件服务器_第2张图片

  • List head
    每一个List 都对应每一列的表头,每一行相邻相同的表头会自动合并单元格
    EasyExcel实现 动态数据库表Excel导出,并上传文件服务器_第3张图片

  • List body
    每一个List 都对应每一行的数据(区别于表头)
    EasyExcel实现 动态数据库表Excel导出,并上传文件服务器_第4张图片

20220304 【使用HttpServletResponse 获取输出流】

接口中直接下载文件,使用HttpServletResponse 获取输出流

EasyExcel实现 动态数据库表Excel导出,并上传文件服务器_第5张图片

String encode = URLEncoder.encode("企业版-"+fileName+"-销售数据", "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename=" + encode+".xlsx");
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("utf-8");

ExportEasyExcelUtil.ExportSingleHeadGroupExcel2(headList,dataList,outputStream);

EasyExcel实现 动态数据库表Excel导出,并上传文件服务器_第6张图片

20220319 【EasyExcel实现多sheet页导出】

 /**
     * 动态导出excel(多sheet)
     * @param outputStream
     * @return java.io.OutputStream
     * @author [email protected]
     * @date 2022/3/18
     */
    public static ByteArrayOutputStream ExportSingleHeadGroupExcelBySheet(List<Map<String, List<List<String>>>> dataMaps, ByteArrayOutputStream outputStream) {
        ExcelWriter excelWriter  = EasyExcel.write(outputStream).build();

        WriteSheet test1 = EasyExcel.writerSheet(0, "sheet1").head(dataMaps.get(0).get("body"))
//                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(100)) // 简单的列宽策略,列宽20
//                .registerWriteHandler(new SimpleRowHeightStyleStrategy((short)100,(short)100))
                .build();


        WriteSheet test2 = EasyExcel.writerSheet(1, "sheet2").head(dataMaps.get(1).get("title")).registerWriteHandler(setExcelStyle()).build();
        excelWriter.write(dataMaps.get(0).get("title"),test1).write(dataMaps.get(1).get("body"),test2);
        excelWriter.finish();
        return outputStream;
    }

EasyExcel实现 动态数据库表Excel导出,并上传文件服务器_第7张图片
与上文一致,只不过用Map将不同sheet页中的bodyList和titleList传进来。

参考博客

你可能感兴趣的:(工作总结,excel,poi)