easypoi导出execl数据

我们最终要实现的效果是将下图的数据填充
在这里插入图片描述

maven 坐标

<dependency>
    <groupId>cn.afterturn</groupId>
     <artifactId>easypoi-base</artifactId>
     <version>3.0.3</version>
 </dependency>
 <dependency>
     <groupId>cn.afterturn</groupId>
     <artifactId>easypoi-web</artifactId>
     <version>3.0.3</version>
 </dependency>
 <dependency>
     <groupId>cn.afterturn</groupId>
     <artifactId>easypoi-annotation</artifactId>
     <version>3.0.3</version>
 </dependency>

实体类
在这里插入图片描述
工具类

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import com.runpu.rps.model.Custom;
import com.sun.deploy.net.URLEncoder;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;


/**
 * execl快速导入导出工具类
 *
 * */
public class EasyPoiUtil {

    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,
                                   boolean isCreateHeader, HttpServletResponse response) throws Exception {
        ExportParams exportParams = new ExportParams(title, sheetName);
        exportParams.setCreateHeadRows(isCreateHeader);
        defaultExport(list, pojoClass, fileName, response, exportParams);

    }

    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,
                                   HttpServletResponse response) {
        defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
    }

    public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response)
            throws Exception {
        defaultExport(list, fileName, response);
    }

    private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response,
                                      ExportParams exportParams) {
        Workbook workbook = null;
        try {
            workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (workbook != null)
            try {
                downLoadExcel(fileName, response, workbook);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

    private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook)
            throws Exception {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            throw new Exception(e.getMessage());
        }
    }

    private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response)
            throws Exception {
        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
        if (workbook != null)
            ;
        downLoadExcel(fileName, response, workbook);
    }

    /**
     * 从execl文件中导出数据到数据库
     * @param filePath execl文件路径
     * @param titleRows 标题行
     * @param headerRows 表头行
     * @param pojoClass 对象
     * */
    public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass)
            throws Exception {
        if (org.apache.commons.lang3.StringUtils.isBlank(filePath)) {
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
        } catch (NoSuchElementException e) {
            throw new Exception("模板不能为空");
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception(e.getMessage());
        }
        return list;
    }

    public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass)
            throws Exception {
        if (file == null) {
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
        } catch (NoSuchElementException e) {
            throw new Exception("excel文件不能为空");
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        }
        return list;
    }

    //
    public static void main(String[] args) {
        String filePath = "";
        //解析excel,
        List<Custom> personList = null;
        try {
            personList = EasyPoiUtil.importExcel(filePath,1,1,Custom.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //也可以使用MultipartFile,使用 FileUtil.importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass)导入
        System.out.println("导入数据一共【"+personList.size()+"】行");

        //TODO 保存数据库
    }

}

工具类中有一个测试的方法可以测试下导出,最终导出的效果如下图所示。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: easypoi是一款Java的POI扩展库,可以方便地将Java对象转换为Excel、Word、PDF等格式的文档。使用easypoi导出Excel大量数据非常简单,只需要将数据封装成Java对象,然后使用easypoi提供的API即可。同时,easypoi还支持Excel的样式设置、图片插入等功能,可以满足各种导出需求。 ### 回答2: Easypoi是一款基于POI的Java开发框架,它可以简化与Microsoft Excel文档交互的过程,提供了易于使用的API,使开发人员能够快速构建和导出Excel文档。 在导出大量数据的情况下,Easypoi的性能表现非常出色,它采用了多线程和文件流的方式进行数据的处理和输出,大大提高了导出效率,避免了出现内存溢出等问题。 Easypoi可以支持多种数据源的导出,包括List、Map、JavaBean等,开发人员可以根据具体业务需求选择合适的数据源进行导出。同时,Easypoi提供了丰富的样式设置和模板功能,通过对样式的设置和模板文件的使用,可以实现复杂数据导出。 在使用Easypoi进行大量数据导出的过程中,需要注意以下几点: 1. 数据的准备:在导出之前需要确保数据完整、正确。若数据源较大,可以考虑进行分页处理。 2. 导出样式的设置:Easypoi提供了多种样式设置的方法,如字体、颜色、边框等,可以通过设置样式让导出的Excel文档更加美观。 3. 模板的设计与使用:如果需要导出数据比较复杂,可以考虑使用模板,将数据填充到模板中,模板文件中的样式和格式将会在导出文档中自动保留。 4. 文件流和多线程的使用:为了提高导出效率并避免内存溢出等问题,可以采用文件流和多线程的方式进行数据的处理和输出。 总之,Easypoi作为一款高效、易用的Excel导出框架,为我们提供了便利的开发和导出Excel文档的方法。在使用Easypoi导出大量数据时,需要注意一些细节,以确保导出的文档准确完整、美观清晰。 ### 回答3: EasyPoi是一款基于Apache POI封装的Java Excel操作工具,它提供了简单易用的API,使得导出Excel变得非常简单方便。在处理大量数据时,EasyPoi也是非常适用的。 首先,在导出大量数据时,需要使用PoiBaseView来创建Excel对象。它可以优化内存使用,避免内存溢出的问题。我们可以通过以下代码来创建PoiBaseView: ``` public class MyExcelView extends PoiBaseView { @Override protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { // 将数据写入Excel,以下省略 } } ``` 其次,我们需要设置分页导出,即每次导出指定数量的数据,以免一次性导出过多数据导致内存溢出。EasyPoi提供了一个非常方便的分页导出工具类,我们可以通过以下代码来设置分页: ``` ExportParams params = new ExportParams("标题", "表名"); params.setType(ExcelType.XSSF); // 设置Excel格式,XSSF为xlsx,HSSF为xls params.setSheetName("Sheet1"); // 设置Sheet名 params.setCreateHeadRows(true); // 设置是否创建头部信息 params.setFreezePane(1, 1); // 冻结第一行 params.setPageNum(10000); // 每次导出10000条数据 ``` 最后,我们需要配置导出数据的格式。EasyPoi提供了非常丰富的注解来配置导出数据格式,比如@Excel、@ExcelIgnore等。我们可以通过以下代码来配置导出数据格式: ``` public class User { @Excel(name = "ID", width = 25) private String id; @Excel(name = "姓名", width = 25) private String name; @Excel(name = "年龄", width = 25) private Integer age; //省略get/set方法 } ``` 以上是针对EasyPoi导出大量数据的简单介绍。EasyPoi提供了方便易用的接口,处理大量数据时也能得到非常好的性能表现。在实际应用中,我们可以根据具体需求进行更加详细的配置,以满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值