EasyExcel导出Excel文件

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

导出Excel

方法一

导入EasyExcel依赖

<!--        导出excel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
</dependency>

创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderExcel {
    //订单号
    @ExcelProperty("订单编号")
    private long orderId;
    //xxxxxx
}

OrderServiceImpl

public void excelWrite(){
    //1、创建一个文件对象
    File excelFile = new File("E:/Order.xlsx");
    //2、判断文件是否存在,不存在则创建一个Excel文件
    if (!excelFile.exists()) {
        try {
            excelFile.createNewFile();//创建一个新的文件
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //3、指定需要那个class去写。然后写到第一个sheet,名字为模版,然后文件流会自动关闭
    EasyExcel.write(excelFile, OrderExcel.class).sheet("订单模版").doWrite(queryToExcel());
}
public List<OrderExcel> queryToExcel() {
	//业务代码,获取数据集
    List<Order> orders = xxxxxx.xxxxxx(xxxxxx);
    List<OrderExcel> excels = new ArrayList<>();
    //遍历数据集,导出Excel
    for (int i = 0; i < orders.size(); i++) {
        Order order = orders.get(i);
        OrderExcel data = new OrderExcel();
        data.setOrderId(order.getOrderId());
        excels.add(data);
    }
    return excels;
}

如果希望多个sheet导出那么可以

public String toExcel(String b, String s, String e ,String filePath) {
   	//业务代码
    //xxxxxx
    //1、创建一个文件对象
    // 输出流
    OutputStream outputStream = null;
    try {
        outputStream = new FileOutputStream(new File(filePath));
        //3、指定需要那个class去写。然后写到第i个sheet
        ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
        int i=0;
        //业务代码
        for (xxxxxx) {
           
            List<DataExcel> excels = new ArrayList<>();
            //业务代码,将xxxxxx导入到excels中
            xxxxxxmap.entrySet().forEach(f->excels.add(new DataExcel(f.getKey(),f.getValue())));

            //不同的表数据写在不同的sheet
            WriteSheet build = EasyExcel.writerSheet(i, entry.getKey().getGroupName()).head(DataExcel.class).build();
            i++;
            excelWriter.write(excels,build);
        }
        excelWriter.finish();
    }catch (Exception e){
        e.printStackTrace();
    }
    return "导出Excel成功";
}

测试类

@Test
public void TestToExcel(){
    orderService.excelWrite();
}

方法二

导入EasyExcel依赖

<!--        导出excel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
</dependency>

编写ExcelUtil

@Component
public class ExcelUtil {
    public ExcelWriter getExcelWriter(HttpServletResponse response){
        //内容样式策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        //垂直居中,水平居中
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        //设置边框
        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);

        // 字体策略
        WriteFont contentWriteFont = new WriteFont();
        // 字体大小
        contentWriteFont.setFontHeightInPoints((short) 12);
        contentWriteCellStyle.setWriteFont(contentWriteFont);
        //头策略使用默认 设置字体大小
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 12);
        headWriteCellStyle.setWriteFont(headWriteFont);
        ExcelWriter excelWriter;
        //ExcelWriter写入对象
        try {
            //这是为了导出流,在浏览器下载excel因此选择response.getOutputStream
             excelWriter= EasyExcel.write(response.getOutputStream()).registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle)).build();
            
            //如果导出到本地
            //excelWriter= EasyExcel.write(new FileOutputStream("FilePath")).registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle)).build();
             return excelWriter;
        }catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return null;
    }


    //发送响应流方法,无论是word,excel,text都实用的响应流类
    public void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = new String(fileName.getBytes(),"ISO8859-1");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //浏览器检测文件类型,有两种响应:第一种是MIME(多功能Internet 邮件扩充服务,最早用于邮件系统,后来拓展到浏览器中);
            // 另一种,当浏览器无法确定文件类型时,就是application/octet-stream类型。
            response.setContentType("application/octet-stream;charset=ISO8859-1");
            response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
            //关闭缓存
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


}

编写Service层代码

public ExcelWriter toExcel(String c,String u,ExcelWriter excelWriter){
    log.info("导出Excel,code:{},userId:{}",code,userId);
    //获取表数据
    //xxxxxx

    //获取表头信息
    //业务代码
    List<List<String>> titleList = xxxxxx;

    //创建表格对象
    WriteTable table = new WriteTable();
    //设置表头
    table.setHead(titleList);
    //获取所有表
   	//xxxxxx
    //设置sheet编号
    int index = 1;
    //遍历多个表,(如果有多个表)
    for (T t : TList) {
        //根据需要写业务代码
        //xxxxxx
        
        //创建Sheet对象
        WriteSheet sheet = new WriteSheet();
        //设置第N个Sheet
        sheet.setSheetNo(index);
        //设置Sheet名称
        sheet.setSheetName(config.getPositionName());
        //获取信息列表
        List<List<Object>> contentsList = xxxxxx;
        excelWriter.write(contentsList,sheet,table);
        index++;
    }
    log.info("导出成功");
    return excelWriter;
}

controller层代码

@PostMapping("futures/toExcel")
public void toExcel(@RequestBody T t, HttpServletResponse response){
    
    //业务代码
    //if(xxxxxx){
        //xxxxxx
    //}
    //文件名
    String fileName = t+"-"+ DateUtil.date().toDateStr()+".xlsx";
    //设置导出流的response信息
    excelUtil.setResponseHeader(response,fileName);
    ExcelWriter excelWriter = excelUtil.getExcelWriter(response);
    String code = baseCondition.getCode();
    excelWriter = excelService.toExcel(xxxxxx, xxxxxx,excelWriter);
    //释放资源
    excelWriter.finish();
}

方法一与方法二都使用了EasyExcel进行Excel的导出,区别在于方法一建立了实体类进行Excel的导出,这样的好处是可以直接使用实体类对象进行数据的导出,每一个列和标题都是对应关系。方法二则直接使用了List来导出,每一行数据作为一个list,这样的好处就是可以设置到每一行的每一列。除此之外,方法二还使用了流进行导出,在网页端点击导出Excel按钮发送请求给后端之后,会弹出下载的文件。文章来源地址https://www.toymoban.com/news/detail-633044.html

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

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

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

相关文章

  • Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

    一般列表导出以及个性化样式设置请看下面的文章: JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况. JAVA导出Excel通用工具——第二篇:使用EasyExcel导出excel的多种情况的例子介绍.

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

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

    2024年02月14日
    浏览(25)
  • java-EasyExcel导出excel设置单元格为文本格式(含代码)

    java-EasyExcel导出excel设置单元格为文本格式(含代码) 在使用EasyExcel导出excel模板时。我们会发现导出的日期和大长度数字都会自动更换格式,不是文本格式。并且在空白单元格输入日期也是格式有问题的,如下所示,可以看到当输入相同的日期时,格式会变成自适应,不是文

    2023年04月15日
    浏览(34)
  • Java 使用 easyexcel 读取 excel 文件

    easyexcel 官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 1. 引入依赖并给出示例 excel     2. 两种读取的方式         (1)确定表头:建立对象,和表头形成映射。(这里以此为例)         (2)不确定表头:每一行映射为 MapString, Object。 3. 先创建 excel 中表头对应

    2024年02月12日
    浏览(39)
  • Java EasyExcel高效读取保存excel文件

    阿里开源出一款易上手,且比较节省内存的Excel操作框架:EasyExcel。EasyExcel是一行一行进行读取,再大的excel也不会出现OOM。 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存

    2024年02月16日
    浏览(36)
  • EasyExcel实现Excel文件导入导出功能

    Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。 EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。

    2024年02月02日
    浏览(54)
  • easyexcel根据模板导出Excel文件,表格自动填充问题

    同事在做easyexcel导出Excel,根据模板导出的时候,发现导出的表格,总会覆盖落款的内容。 这就很尴尬了,表格居然不能自动填充,直接怒喷工具,哈哈。 然后一起看了一下这个问题。 我找了自己的系统中关于表格导出的页面,导出了一下,发现可以正常扩充。 于是排查问

    2024年02月06日
    浏览(38)
  • 使用POI和EasyExcel来实现excel文件的导入导出

    废话不多说咱们直接上干货!!!! 一.读取Excel表格 【1】使用POI读取excel表格中的数据 POI还可以操作我们这个word文档等等,他不仅仅只能弄Excel,而JXI只能操作excel 1.POI的结构,我们可以更具文件的类去选择 相关的对象我当前是使用的XLSX来操作的 HSSF - 提供读写Microsoft

    2024年02月05日
    浏览(37)
  • Springboot基于easyexcel实现一个excel文件包含多个sheet表格的数据导出

    EasyExcel 是一款基于Java的开源Excel操作工具,它提供了简单且强大的 API,使开发人员可以轻松地读写、操作和生成Excel文件。 EasyExcel 支持 Excel 文件的导入和导出,可以处理大量数据,具有高性能和低内存占用。它可以读取 Excel 文件中的数据,并将数据转换为 Java 对象,也可

    2024年02月03日
    浏览(39)
  • 基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程

    首先前端发起HTTP请求之后,后端返回一个Excel输出流,然后前端用Blob类型接收数据,并且解析响应头数据以及提取源文件名,最后用a标签完成下载。 一、后端代码 (1)导入阿里巴巴的EasyExcel依赖(pom.xml) (2)控制层(GameController.java) (3)接口层(IGameService.java) (4)

    2024年02月16日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包