阿里EasyExcel快速导出demo

这篇具有很好参考价值的文章主要介绍了阿里EasyExcel快速导出demo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引入阿里easyExcel依赖

       <!-- easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.ehcache</groupId>
                    <artifactId>ehcache</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

自定义的阿里easyexcel拦截器方法


import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import com.jerry.util.ExcelUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URL;


public class SheetWriteHandlerUtil implements SheetWriteHandler {

    private String title;
    private String[] header;
    private String imageurl;
    private String sheetName;
    private final Log log = LogFactory.getLog(getClass());

    public SheetWriteHandlerUtil(String title, String[] header, String imageurl, String sheetName) {
        this.title = title;
        this.header = header;
        this.imageurl = imageurl;
        this.sheetName = sheetName;
    }
    public SheetWriteHandlerUtil(String sheetName) {
        this.sheetName = sheetName;
    }


    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Workbook workbook = writeWorkbookHolder.getWorkbook();
        Sheet sheet = workbook.getSheetAt(0);
        if (StringUtils.isNotEmpty(sheetName)){
            writeWorkbookHolder.getCachedWorkbook().setSheetName(0, sheetName);
        }
        if (StringUtils.isNotEmpty(title)){
            //设置标题
            Row row1 = sheet.createRow(0);
            row1.setHeight((short) 800);
            Cell cell = row1.createCell(0);
            //设置单元格内容
            cell.setCellValue(title);
            CellStyle cellStyle = workbook.createCellStyle();
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            cellStyle.setAlignment(HorizontalAlignment.LEFT);
            Font font = workbook.createFont();
            font.setBold(true);
            font.setFontHeight((short) 400);
            cellStyle.setFont(font);
            cell.setCellStyle(cellStyle);
        }
        if (header != null){
            // 第一行大标题占位设置
            sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, header.length-1));
        }
        if(StringUtils.isNotEmpty(imageurl)){
            try {
                imagewrite(writeWorkbookHolder,writeSheetHolder,imageurl);
            } catch (IOException e) {
                e.printStackTrace();
                log.error("easyexcel拦截器图片流处理出错"+ e.getMessage());
            }
        }

    }
    public void imagewrite(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder,String imageurl) throws IOException {
        Workbook workbook = writeWorkbookHolder.getWorkbook();
        Sheet sheet = workbook.getSheetAt(0);
        try (ByteArrayOutputStream picOut = new ByteArrayOutputStream()) {
            //读图片并写入流
            BufferedImage bufferedImage = ImageIO.read(new URL(imageurl));
            ImageIO.write(bufferedImage, "png", picOut);
            ExcelUtils.addPictureToSheet(sheet, 3, 3, 0,0,workbook.addPicture(picOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG),1.3,6.25);
        } catch (Exception e) {
            log.debug("", e);
        }

    }
}

自定义的EasyExcelUtils方法类


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 com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.ss.usermodel.*;

import java.io.ByteArrayOutputStream;
import java.util.*;

/**
 * @author wangchaofan-n
 */
public class EasyExcelUtils {

    private final Log log = LogFactory.getLog(getClass());

    /**
     *
     * @param list  数据
     * @param title 标题
     * @param header 动态列
     */
    public static void exportDetailLeave(List<Map<String,Object>> list, String title, String[] header,ByteArrayOutputStream out,String imageurl) {
        // 标题样式
        WriteCellStyle headWriteCellStyle = getHeadStyle();
        // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
        HorizontalCellStyleStrategy horizontalCellStyleStrategy =
                new HorizontalCellStyleStrategy(headWriteCellStyle, new WriteCellStyle());
        EasyExcel.write(out)
                // 第一行大标题样式设置
                .registerWriteHandler(new SheetWriteHandlerUtil(title,header, imageurl, null))
                //设置默认样式及写入头信息开始的行数
                .useDefaultStyle(true).relativeHeadRowIndex(1)
                // 表头、内容样式设置
                .registerWriteHandler(horizontalCellStyleStrategy)
                // 统一列宽,如需设置自动列宽则new LongestMatchColumnWidthStyleStrategy()
                //.registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .sheet(title)
                // 这里放入动态头
                .head(head(header))
                // 当然这里数据也可以用 List<List<String>> 去传入
                .doWrite(detail(list));

    }

    private static List<List<Object>> detail(List<Map<String, Object>> mapList) {
        List<List<Object>> list = new ArrayList<>();
        for (Map<String, Object> map : mapList) {
            List<Object> objectList = new ArrayList<>();
            Set<Map.Entry<String,Object>> entrySet = map.entrySet();
            for (Map.Entry<String,Object> entry :entrySet){
                objectList.add(entry.getValue());
            }
            list.add(objectList);
        }
        return list;
    }


    /**动态头传入*/
    public static List<List<String>> head(String[] header) {
        List<String> head0 = null;
        List<List<String>> list = new LinkedList<>();
        for (String h : header) {
            head0 = new LinkedList<>();
            head0.add(h);
            list.add(head0);
        }
        return list;
    }


    public static WriteCellStyle getHeadStyle(){
        // 头的策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 背景颜色
        headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        // 字体
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontName("黑体");//设置字体名字
        headWriteFont.setFontHeightInPoints((short)15);//设置字体大小
        headWriteFont.setBold(true);//字体加粗
        headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;
        // 样式
        headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
        headWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
        headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
        headWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
        headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
        headWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
        headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
        headWriteCellStyle.setTopBorderColor((short) 0); //设置顶边框颜色;
        headWriteCellStyle.setWrapped(true);  //设置自动换行;
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对齐的样式为居中对齐;
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐的样式为居中对齐;
        //headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适

        return headWriteCellStyle;
    }




}

调用示例文章来源地址https://www.toymoban.com/news/detail-653264.html

            ByteArrayOutputStream out = new ByteArrayOutputStream()
            // 此处填写表的列名
            String[] heads = new String[]{"列名1","学习","题干","选项","答案","解析"};
            // 此处为查询数据库语句  注意查询语句的返回需用 java.util.LinkedHashMap
            List<Map<String,Object>> list = nmgtkmanagemapper.querytkinfobystbhs(stbhs);
            // 最后一位传参为电子章地址 若需要可传
            EasyExcelUtils.exportDetailLeave(list,"表格的大标题",heads,out,null);

到了这里,关于阿里EasyExcel快速导出demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EasyExcel入门小demo,简单理解EasyExcel

    一、什么是EasyExcel EasyExcel是阿里巴巴开源的一个excel处理框架, 以使用简单、节省内存著称 。该项目实现了列表数据的导入,分页列表导出,支持自定义格式,支持模版以及模板和列表的混合导出,小巧、简易、高性能。 二、使用 1.pom.xml  2.实体类(需要写入excel的类) 

    2023年04月22日
    浏览(21)
  • easyExcel合并单元格导出

    (很多旧项目自定义了一套Excel导出工具,poi版本可能不兼容,一般poi新旧版本不兼容分界线在3.17,选择3.17版本不会发生代码不兼容情况)

    2024年02月09日
    浏览(36)
  • EasyExcel 批量导出

    上篇写了数据导入,本文补充一下EasyExcel 批量导出 包括常规excel和复杂excel 通过重写 sheetDynamicHead 方法自定义复杂表头 @ExcelProperty(order = 0) 注解指定excel列即可填充到指定单元格 protected List sheets() 方法内返回多个sheet protected List sheetData(int sheetIndex)方法内指定sheet填充的数据

    2024年02月09日
    浏览(34)
  • easyexcel 导出

     在使用EasyExcel库进行数据写入时,通常我们会使用实体类来存储数据。但是当遇到动态查询,无法确定属性数量和名称时,就需要使用Map来接收数据。然而,直接将Map中的数据写入Excel表格并不是一件简单的事情。接下来,我将介绍如何使用EasyExcel库将Map数据写入Excel表格。

    2024年02月04日
    浏览(25)
  • EasyExcel导出Excel文件

    方法一 导入EasyExcel依赖 创建实体类 OrderServiceImpl 如果希望多个sheet导出那么可以 测试类 方法二 导入EasyExcel依赖 编写ExcelUtil 编写Service层代码 controller层代码 方法一与方法二都使用了EasyExcel进行Excel的导出,区别在于方法一建立了实体类进行Excel的导出,这样的好处是可以直

    2024年02月14日
    浏览(29)
  • EasyExcel 动态头导出

    如需了解 EasyExcel 的基本使用请移步此处 :https://blog.csdn.net/weixin_42001592/article/details/128402350 导出的表格头部内容不固定 如果导出的数据每次都有不同的列,需要根据数据动态生成表头,这时动态头导出就非常适用。例如,每次需要导出的数据可能只包含部分字段,那么表头

    2024年02月13日
    浏览(26)
  • EasyExcel的简单导出

    EasyExcel的简单导出 Controller层代码 Service处理代码 SysColExcelDto.java类 这是使用easyExcel提供的注解来标记字段填充行数,这种情况适用于自动生成,如果是填充excel(doFill方式)可以不用ExcelProperty注解标识,但是需要在模板中标记数据填充位置 模板标记数据填充位置标记如下,

    2024年02月15日
    浏览(31)
  • EasyExcel动态头导出

    前言 这段时间的项目中需要导出动态表格。 根据所选的参数导出对应的字段内容 下图所示选择下面几个tab页就需要导出对应的表头字段 下面为具体实现的效果。表头样式可以通过 EasyExcel 提供的方法自定义。 具体实现 主要是通过 传入 exportItem 这个条件来决定导出的事项。

    2024年02月08日
    浏览(30)
  • 使用EasyExcel模版导出

    easyexcel官方文档 填充Excel | Easy Excel 官方demo是利用本地模版文件填充并下载到本地 我用的是web项目,将输出改为了输出流 OutputStream  模版: 效果: 使用模版文件有两种方式,使用其中一种就可以:     1.文件路径:.withTemplate(templateFileName)     2.输入流:.withTemplate(inputS

    2024年02月14日
    浏览(27)
  • EasyExcel导入和导出数据

    1.cmtroller 调用service方法,完成导出 2.service 调用工具类的方法完成导出 传入response,标题控制类(标题名称,合并的列数),员工列表,文件名称,excel的标题名称,要导出的数据类 3.工具类中的方法 4.控制标题类 这个类控制数据之前的显示内容 效果 2022-10-28 乱码解决 因为文件

    2023年04月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包