服务器测评网
我们一直在努力

java怎么生成导出excel文件?实现步骤与代码示例分享

在Java开发中,生成和导出Excel文件是一项常见的需求,广泛应用于数据报表、财务报表、数据导出等场景,Java生态中有多种工具可以实现Excel文件的生成,其中Apache POI和EasyExcel是当前最主流的解决方案,本文将详细介绍这两种工具的使用方法,并对比其优缺点,帮助开发者根据实际需求选择合适的方案。

java怎么生成导出excel文件?实现步骤与代码示例分享

使用Apache POI生成Excel文件

Apache POI是Apache软件基金会推出的一个开源项目,专门用于操作Microsoft Office格式文件,包括Excel、Word、PowerPoint等,POI功能强大,支持Excel的多种格式,如.xls(BIFF格式)和.xlsx(OOXML格式),是目前Java操作Excel最成熟的工具之一。

添加依赖

在使用POI之前,需要在项目中添加相应的依赖,对于Maven项目,可以在pom.xml中添加以下依赖:

<!-- poi核心依赖 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<!-- poi-ooxml用于支持.xlsx格式 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

生成Excel文件的基本步骤

使用POI生成Excel文件的基本流程包括:创建工作簿、创建工作表、创建行、创建单元格、设置单元格内容、写入文件流,以下是一个简单的示例代码,生成一个包含学生信息的Excel文件:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class PoiExcelExport {
    public static void main(String[] args) {
        // 1. 创建工作簿(对应Excel文件)
        Workbook workbook = new XSSFWorkbook();
        // 2. 创建工作表(对应Excel中的Sheet)
        Sheet sheet = workbook.createSheet("学生信息");
        // 3. 创建表头行
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("学号");
        headerRow.createCell(1).setCellValue("姓名");
        headerRow.createCell(2).setCellValue("年龄");
        // 4. 创建数据行
        Row dataRow1 = sheet.createRow(1);
        dataRow1.createCell(0).setCellValue("1001");
        dataRow1.createCell(1).setCellValue("张三");
        dataRow1.createCell(2).setCellValue(20);
        Row dataRow2 = sheet.createRow(2);
        dataRow2.createCell(0).setCellValue("1002");
        dataRow2.createCell(1).setCellValue("李四");
        dataRow2.createCell(2).setCellValue(21);
        // 5. 写入文件流
        try (FileOutputStream fos = new FileOutputStream("students.xlsx")) {
            workbook.write(fos);
            System.out.println("Excel文件生成成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

高级功能

POI还支持设置单元格样式(如字体、颜色、边框)、合并单元格、设置列宽等高级功能,设置表头加粗和背景色的代码如下:

java怎么生成导出excel文件?实现步骤与代码示例分享

// 创建单元格样式
CellStyle headerStyle = workbook.createCellStyle();
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerStyle.setFont(headerFont);
headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 应用样式到表头
for (Cell cell : headerRow) {
    cell.setCellStyle(headerStyle);
}

使用EasyExcel生成Excel文件

EasyExcel是阿里巴巴开源的一个基于Java的简单、省内存的Excel处理工具,它解决了POI在处理大数据量时内存占用过高的问题,EasyExcel采用SAX模式读写Excel,适用于数据量较大的场景,同时API设计简洁,使用方便。

添加依赖

在Maven项目中添加EasyExcel的依赖:

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

生成Excel文件的基本步骤

EasyExcel生成Excel文件的流程更加简化,通常只需要定义实体类、创建ExcelWriter、写入数据并关闭资源即可,以下是一个示例:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelExport {
    public static void main(String[] args) {
        // 1. 准备数据
        List<Student> dataList = new ArrayList<>();
        dataList.add(new Student("1001", "张三", 20));
        dataList.add(new Student("1002", "李四", 21));
        // 2. 写入Excel
        String fileName = "students_easy.xlsx";
        WriteSheet writeSheet = EasyExcel.write(fileName, Student.class).sheet("学生信息").build();
        EasyExcel.write(fileName, Student.class).sheet().doWrite(dataList);
        System.out.println("Excel文件生成成功");
    }
    // 实体类,对应Excel的列
    public static class Student {
        @ExcelProperty("学号")
        private String id;
        @ExcelProperty("姓名")
        private String name;
        @ExcelProperty("年龄")
        private Integer age;
        public Student(String id, String name, Integer age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
        // getter和setter方法
        public String getId() { return id; }
        public void setId(String id) { this.id = id; }
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
        public Integer getAge() { return age; }
        public void setAge(Integer age) { this.age = age; }
    }
}

高级功能

EasyExcel支持注解配置,如@ExcelProperty指定列名,@ExcelIgnore忽略字段等,还可以通过WriteTable实现复杂表头的写入,通过WriteSheet设置Sheet名称和序号等。

java怎么生成导出excel文件?实现步骤与代码示例分享

两种工具的对比与选择

特性 Apache POI EasyExcel
内存占用 较高,处理大数据量时容易OOM 低,采用SAX模式,适合大数据量
功能丰富度 功能全面,支持所有Excel特性 功能相对简单,满足基本需求
使用难度 API较复杂,需要手动管理样式和单元格 API简洁,注解驱动,开发效率高
性能 中等 优秀,写入和读取性能较高
适用场景 复杂Excel操作(如公式、图表)、中小数据量 大数据量导出、简单Excel生成

注意事项

  1. 资源关闭:使用POI或EasyExcel时,务必确保关闭Workbook、ExcelWriter等资源,避免内存泄漏。
  2. 异常处理:文件操作过程中可能抛出IOException,需要进行异常捕获和处理。
  3. 数据量控制:对于大数据量导出,建议采用分批写入或异步导出的方式,避免长时间占用线程资源。
  4. 样式兼容性:不同版本的Excel(如.xls和.xlsx)在样式支持上存在差异,需根据目标版本选择合适的工具和API。

Java生成Excel文件的方法有多种,开发者应根据项目需求、数据量大小和功能复杂度选择合适的工具,对于简单的数据导出场景,EasyExcel是更优的选择;而对于需要复杂样式或操作的场景,Apache POI则更为适用。

赞(0)
未经允许不得转载:好主机测评网 » java怎么生成导出excel文件?实现步骤与代码示例分享