21xrx.com
2025-03-27 14:58:12 Thursday
文章检索 我的文章 写文章
Java实现大规模Excel数据导出
2023-06-16 16:26:35 深夜i     --     --
Java poi EasyExcel Excel导出 大量数据

在企业级应用程序中,数据的导出总是必不可少的一部分。以Excel为代表的表格类应用软件是处理这部分业务的首选工具。在Java技术中有多种方式来实现Excel数据导出,本文将介绍其中一种基于poi和EasyExcel的Java实现方式。

一、poi介绍

Apache POI是使用Java编写的用于处理Office文档的开源项目,提供了创建、读取和修改Excel、Word和PowerPoint等文档的API。本文主要使用poi提供的HSSFWorkbook和XSSFWorkbook两个类来创建Excel文档。其中,HSSFWorkbook用于创建Excel .xls格式的文档,而XSSFWorkbook则用于创建Excel .xlsx格式的文档。

二、EasyExcel介绍

EasyExcel是基于poi封装而来的一款JavaExcel操作库,它封装了poi中复杂的API,对外提供了简单易用的API接口。EasyExcel能够快速高效地完成大规模Excel数据导入导出操作,且支持多种格式,如.csv、.xls、.xlsx等,使用时只需要依赖EasyExcel jar包即可。

三、实现步骤

1. 引入poi和EasyExcel相关jar包

在pom.xml中引入如下依赖:

org.apache.poi
 
  
  poi
 
  
  3.17
 

  
  org.apache.poi
 
  
  poi-ooxml
 
  
  3.17
 

  
  com.alibaba
 
  
  easyexcel
 
  
  2.2.10

2. 使用poi创建Excel文件

// 创建HSSFWorkbook,该对象用于创建Excel .xls格式的文档
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建Sheet对象
HSSFSheet sheet = workbook.createSheet("数据导出");
// 创建Row对象
HSSFRow row = sheet.createRow(0);
// 创建Cell对象
HSSFCell cell = row.createCell(0);
cell.setCellValue("姓名");
// 操作文件流,将文件保存到磁盘上
String fileName = "test.xls";
FileOutputStream fos = new FileOutputStream(fileName);
workbook.write(fos);

3. 使用EasyExcel导出Excel数据

// 设置导出参数
String fileName = "test.xlsx";
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
// 创建ExcelWriter对象
ExcelWriter writer = EasyExcel.write(response.getOutputStream()).build();
// 创建sheet并写入数据
Sheet sheet = new Sheet(1, 0, DemoData.class);
// 设置自适应宽度
sheet.setAutoWidth(Boolean.TRUE);
// 向文件中写入数据
writer.write(dataList, sheet);
// 关闭输出流
writer.finish();

四、代码案例

public class ExcelUtil {
  /**
   * 使用poi创建Excel文件
   *
   * @throws IOException 异常
   */
  public static void createExcel() throws IOException {
    // 创建HSSFWorkbook,该对象用于创建Excel .xls格式的文档
    HSSFWorkbook workbook = new HSSFWorkbook();
    // 创建Sheet对象
    HSSFSheet sheet = workbook.createSheet("数据导出");
    // 创建Row对象
    HSSFRow row = sheet.createRow(0);
    // 创建Cell对象
    HSSFCell cell = row.createCell(0);
    cell.setCellValue("姓名");
    // 操作文件流,将文件保存到磁盘上
    String fileName = "test.xls";
    FileOutputStream fos = new FileOutputStream(fileName);
    workbook.write(fos);
  }
  /**
   * 使用EasyExcel导出Excel数据
   *
   * @param response  响应对象
   * @param dataList  数据列表
   * @param sheetName sheet名称
   * @param fileName  导出文件名
   * @param dataClass 数据类型
   * @throws IOException 异常
   */
  public static void exportExcel(HttpServletResponse response, List dataList, String sheetName, String fileName, Class dataClass)
      throws IOException {
    // 设置导出参数
    response.setContentType("application/vnd.ms-excel");
    response.setCharacterEncoding("utf-8");
    response.setHeader("Content-disposition", "attachment;filename=" + fileName);
    // 创建ExcelWriter对象
    ExcelWriter writer = EasyExcel.write(response.getOutputStream(), dataClass).build();
    // 创建sheet并写入数据
    Sheet sheet = new Sheet(1, 0, dataClass);
    sheet.setSheetName(sheetName);
    // 设置自适应宽度
    sheet.setAutoWidth(Boolean.TRUE);
    // 向文件中写入数据
    if (!CollectionUtils.isEmpty(dataList)) {
      writer.write(dataList, sheet);
    }
    // 关闭输出流
    writer.finish();
  }
}

五、关键词

Java、poi、EasyExcel、Excel导出、大量数据

  
  

评论区