当前位置:首页>Excel>Java导出Excel:从入门到精通的实战秘籍

Java导出Excel:从入门到精通的实战秘籍

  • 2026-04-01 10:50:12
Java导出Excel:从入门到精通的实战秘籍

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!

大家好,我是常利兵,独立开发者,这是我的网站 https://make.dxmwl.com

Java 导出 Excel,你真的会吗?

在 Java 开发的世界里,相信不少小伙伴都遇到过这样的需求:将数据导出为 Excel 文件 。看似简单的任务,背后却隐藏着不少门道。比如,当数据量庞大时,如何避免内存溢出?怎样自定义 Excel 的样式,让导出的表格更加美观和专业?又有哪些工具和库可以帮助我们高效地实现这一功能?

在实际开发中,导出 Excel 是一个非常常见的需求。无论是生成报表、数据备份,还是与其他系统进行数据交互,Excel 文件都因其直观、易于编辑的特点,成为了数据传输和展示的重要载体 。所以掌握 Java 中导出 Excel 文件的方法,对于我们开发者来说,是一项必备的技能。接下来,就让我们一起深入探索 Java 导出 Excel 的奥秘吧!

一、Java 导出 Excel 的常用工具

在 Java 中,有许多工具可以帮助我们实现 Excel 文件的导出,其中比较常用的有 Apache POI 和 EasyExcel 。下面我们来详细了解一下这两个工具。

(一)Apache POI

Apache POI 是一个强大的操作 Microsoft Office 格式文件的 API,它允许 Java 开发者创建、修改和显示 MS Office 文件,包括 Excel、Word、PowerPoint 等 。在 Excel 文件导出方面,Apache POI 提供了丰富的功能和灵活的操作方式。

Apache POI 针对 Excel 文件提供了两种主要的实现:HSSF 和 XSSF 。HSSF 用于操作 Excel 97-2003 版本的文件,文件后缀为.xls ,它基于早期的二进制格式,一个工作表最多支持 65536 行、256 列 。而 XSSF 则用于操作 Excel 2007 及以上版本的文件,文件后缀为.xlsx ,它基于 Office Open XML 格式,一个工作表最多支持 1048576 行、16384 列 ,并且在处理大型文件时,内存使用效率更高,还支持 Excel 中的许多高级功能,如公式、格式、图表等 。使用 Apache POI 导出 Excel 文件,我们可以通过创建 Workbook(工作簿)、Sheet(工作表)、Row(行)和 Cell(单元格)等对象,逐步构建出 Excel 文件的结构,并填充数据 。同时,还可以对单元格的样式、字体、颜色、边框等进行设置,使导出的 Excel 文件更加美观和专业 。不过,Apache POI 在处理大数据量时,可能会因为内存占用过高而导致性能问题,需要我们谨慎使用 。

(二)EasyExcel

EasyExcel 是阿里巴巴开源的一个 Excel 处理框架,它是基于 Apache POI 进行封装的,旨在简化 Excel 数据的读写操作 。EasyExcel 具有高性能、简单易用、占用内存小等特点,特别适合处理大量数据的导入导出 。

EasyExcel 通过使用注解和简洁的 API,大大简化了 Excel 文件的操作过程 。我们只需要定义一个 Java 实体类,使用 @ExcelProperty 等注解来标识字段与 Excel 表头的映射关系,就可以轻松实现数据的导出 。例如,在导出用户信息时,我们可以定义一个 User 类,使用注解指定每个字段对应的表头名称,然后通过 EasyExcel 的 write 方法,传入文件路径、实体类和数据列表,即可完成 Excel 文件的导出 。在处理大数据量时,EasyExcel 采用了 SAX(Simple API for XML)模式,按需逐行读取和写入数据,避免了一次性加载整个文件到内存中,从而有效降低了内存的使用,提高了处理效率 。此外,EasyExcel 还支持多线程读写、自定义样式、复杂表头、公式设置等功能,满足了我们在实际开发中的各种需求 。

二、使用 Apache POI 导出 Excel 文件

(一)导入依赖

如果你使用的是 Maven 项目,在pom.xml文件中添加 Apache POI 的依赖。对于 Excel 2007 及以上版本的.xlsx文件,需要添加poi-ooxml依赖;对于 Excel 97 - 2003 版本的.xls文件,需要添加poi依赖 。这里以.xlsx文件为例:


<dependencies>
<!-- POI 核心库,包含操作 Office 文档的基本类 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.3.0</version>
</dependency>
<!-- POI OOXML 库,用于处理 .xlsx 等基于 XML 的格式 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.3.0</version>
</dependency>
</dependencies>

添加依赖后,Maven 会自动下载并管理这些依赖包,让你的项目具备使用 Apache POI 的基础 。

(二)编写导出代码

下面通过一个示例代码,展示如何使用 Apache POI 导出一个简单的 Excel 文件 。假设我们有一个用户列表,每个用户包含姓名、年龄和性别信息,需要将这些信息导出到 Excel 文件中 。


import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

publicclassExcelExporter{
publicstaticvoidmain(String[] args){
// 模拟数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("张三"20"男"));
        userList.add(new User("李四"22"女"));
        userList.add(new User("王五"25"男"));

// 创建工作簿
        Workbook workbook = new XSSFWorkbook();
// 创建工作表
        Sheet sheet = workbook.createSheet("用户信息");

// 创建表头行
        Row headerRow = sheet.createRow(0);
        String[] headers = {"姓名""年龄""性别"};
for (int i = 0; i < headers.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(headers[i]);
        }

// 写入数据行
for (int i = 0; i < userList.size(); i++) {
            User user = userList.get(i);
            Row dataRow = sheet.createRow(i + 1);
            dataRow.createCell(0).setCellValue(user.getName());
            dataRow.createCell(1).setCellValue(user.getAge());
            dataRow.createCell(2).setCellValue(user.getGender());
        }

// 自动调整列宽
for (int i = 0; i < headers.length; i++) {
            sheet.autoSizeColumn(i);
        }

// 保存文件
try (FileOutputStream fileOut = new FileOutputStream("users.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

classUser{
private String name;
privateint age;
private String gender;

publicUser(String name, int age, String gender){
this.name = name;
this.age = age;
this.gender = gender;
    }

public String getName(){
return name;
    }

publicintgetAge(){
return age;
    }

public String getGender(){
return gender;
    }
}

代码解释如下:

  1. 创建工作簿和工作表:使用XSSFWorkbook创建一个新的 Excel 工作簿对象,代表整个 Excel 文件 。然后通过工作簿的createSheet方法创建一个名为 “用户信息” 的工作表对象,工作表是工作簿中的一个页面,用于组织和展示数据 。

  2. 创建表头行:在工作表中创建第一行(索引为 0)作为表头行,通过循环创建单元格,并设置单元格的值为表头信息,如 “姓名”“年龄”“性别” 。这一步确定了 Excel 表格的列名和数据结构 。

  3. 写入数据行:通过循环遍历用户列表,为每个用户在工作表中创建一行数据 。在每一行中,根据用户对象的属性值,创建相应的单元格并设置其值,将用户的姓名、年龄和性别信息填充到对应的单元格中 。

  4. 自动调整列宽:使用工作表的autoSizeColumn方法,根据列中内容的长度自动调整每列的宽度,确保数据能够完整显示,不会出现内容被截断的情况 。这样可以使导出的 Excel 表格更加美观和易读 。

  5. 保存文件:使用FileOutputStream将工作簿写入到指定的文件路径 “users.xlsx” 中,将内存中的 Excel 数据保存到磁盘上,形成一个可访问和使用的 Excel 文件 。最后,关闭工作簿,释放资源 。

通过上述步骤,我们就可以使用 Apache POI 将数据成功导出为 Excel 文件 。在实际应用中,你可以根据具体需求,对代码进行扩展和优化,例如设置单元格样式、添加公式、处理复杂的数据结构等 。

三、使用 EasyExcel 导出 Excel 文件

(一)引入依赖

如果你使用的是 Maven 项目,在pom.xml文件中添加 EasyExcel 的依赖:


<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
</dependencies>

添加依赖后,Maven 会自动下载 EasyExcel 及其相关依赖包,为你的项目提供导出 Excel 文件的支持 。

(二)定义数据模型

创建一个 Java Bean 类,用于表示 Excel 表格中的数据 。通过@ExcelProperty注解来定义列名,指定字段与 Excel 表头的映射关系 。假设我们要导出用户信息,创建User类如下:


import com.alibaba.excel.annotation.ExcelProperty;

publicclassUser{
@ExcelProperty("姓名")
private String name;

@ExcelProperty("年龄")
private Integer age;

@ExcelProperty("性别")
private String gender;

// 省略构造函数、Getter和Setter方法
publicUser(String name, Integer age, String gender){
this.name = name;
this.age = age;
this.gender = gender;
    }

public String getName(){
return name;
    }

publicvoidsetName(String name){
this.name = name;
    }

public Integer getAge(){
return age;
    }

publicvoidsetAge(Integer age){
this.age = age;
    }

public String getGender(){
return gender;
    }

publicvoidsetGender(String gender){
this.gender = gender;
    }
}

在上述代码中,使用@ExcelProperty注解为User类的每个字段指定了对应的 Excel 表头名称 。这样,在导出 Excel 文件时,EasyExcel 会根据这些注解自动生成表头,并将对象的属性值写入相应的单元格 。

(三)编写导出逻辑

下面通过示例代码展示如何使用 EasyExcel 将用户数据导出到 Excel 文件中 。


import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;

publicclassEasyExcelExporter{
publicstaticvoidmain(String[] args){
// 模拟数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("张三"20"男"));
        userList.add(new User("李四"22"女"));
        userList.add(new User("王五"25"男"));

// 导出文件路径
        String fileName = "users_easyexcel.xlsx";

// 写入Excel文件
        EasyExcel.write(fileName, User.class)
               .sheet("用户信息")
               .doWrite(userList)
;

        System.out.println("Excel文件导出成功!");
    }
}

代码解释如下:

  1. 创建数据列表:通过ArrayList创建一个用户列表userList,并添加了三个用户对象,模拟从数据库或其他数据源获取的数据 。

  2. 指定导出文件路径:定义fileName变量,指定导出的 Excel 文件路径为users_easyexcel.xlsx 。

  3. 使用 EasyExcel 写入文件:使用EasyExcel.write方法创建一个写入器,传入导出文件路径和数据模型类User.class 。然后通过sheet方法指定工作表名称为 “用户信息” ,最后调用doWrite方法,传入用户数据列表userList,将数据写入 Excel 文件 。

通过以上步骤,我们就可以使用 EasyExcel 轻松地将数据导出为 Excel 文件 。整个过程代码简洁明了,无需繁琐的单元格和工作表创建操作,大大提高了开发效率 。

四、处理大数据量的 Excel 导出

当数据量较大时,直接导出 Excel 可能会导致内存溢出等问题 。为了避免这些问题,我们可以采用分批写入和使用模板的方式来处理大数据量的 Excel 导出 。

(一)分批写入

分批写入数据的原理是将大数据集分成多个小批次,每次只将一小部分数据写入 Excel 文件 。这样可以避免一次性加载所有数据到内存中,从而减少内存的占用 。

在 EasyExcel 中实现分批写入的代码示例如下:


import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;

import java.util.List;

publicclassBigDataExporter{
publicstaticvoidmain(String[] args){
// 假设 totalData 是你的大数据集
        List<User> totalData = getTotalData(); 
int batchSize = 1000// 每次写入1000条数据
        String fileName = "big_data_export.xlsx";

        ExcelWriter excelWriter = EasyExcel.write(fileName, User.class).build();
        WriteSheet writeSheet = EasyExcel.writerSheet("数据").build();

for (int i = 0; i < totalData.size(); i += batchSize) {
int end = Math.min(i + batchSize, totalData.size());
            List<User> batchData = totalData.subList(i, end);
            excelWriter.write(batchData, writeSheet);
        }

        excelWriter.finish();
    }

privatestatic List<User> getTotalData(){
// 模拟从数据库或其他数据源获取大数据集
        List<User> data = new ArrayList<>();
// 这里添加数据的逻辑
return data;
    }
}

在上述代码中,我们通过totalData.subList(i, end)方法从大数据集中获取每一批次的数据,然后使用excelWriter.write(batchData, writeSheet)方法将每批数据写入 Excel 文件 。这样就实现了分批写入,有效避免了一次性加载所有数据到内存的问题 。

(二)使用模板

使用模板的方式是预先创建一个包含表头的 Excel 模板文件,然后使用 EasyExcel 将数据追加到模板中 。这种方式可以减少内存占用,提高导出效率 。

具体步骤如下:

  1. 创建 Excel 模板:使用 Excel 软件创建一个 Excel 文件,在其中定义好表头、格式等内容 。例如,创建一个名为template.xlsx的模板文件,其中包含 “姓名”“年龄”“性别” 等表头 。

  2. 使用 EasyExcel 追加数据:在 Java 代码中,使用 EasyExcel 的withTemplate方法指定模板文件,然后将数据追加到模板中 。代码示例如下:


import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;

publicclassTemplateExporter{
publicstaticvoidmain(String[] args){
// 假设 userList 是你的数据列表
        List<User> userList = getUserList(); 
        String templateFilePath = "template.xlsx";
        String outputFilePath = "exported_data.xlsx";

try (InputStream inputStream = new FileInputStream(templateFilePath);
             FileOutputStream outputStream = new FileOutputStream(outputFilePath)) {

            ExcelWriter excelWriter = EasyExcel.write(outputStream)
                   .withTemplate(inputStream)
                   .build();

            WriteSheet writeSheet = EasyExcel.writerSheet("数据").build();
            excelWriter.write(userList, writeSheet);

            excelWriter.finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

privatestatic List<User> getUserList(){
// 模拟从数据库或其他数据源获取数据列表
        List<User> data = new ArrayList<>();
// 这里添加数据的逻辑
return data;
    }
}

在上述代码中,通过EasyExcel.write(outputStream).withTemplate(inputStream)方法指定了模板文件,然后使用excelWriter.write(userList, writeSheet)方法将数据追加到模板中 。这种方式利用了模板文件已有的结构和格式,减少了在内存中构建整个 Excel 文件的开销,从而提高了导出效率,降低了内存占用 。

五、自定义 Excel 样式

在导出 Excel 文件时,为了使表格更加美观和专业,我们常常需要对 Excel 的样式进行自定义,如设置字体、颜色、对齐方式等 。下面我们分别来看一下如何使用 EasyExcel 和 Apache POI 进行自定义样式的设置 。

(一)EasyExcel 自定义样式

EasyExcel 提供了丰富的 API,通过实现CellWriteHandler接口,我们可以很方便地自定义 Excel 的样式 。下面是一个设置表头和内容样式的示例代码 :


import com.alibaba.excel.context.WriteContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;

import java.util.List;

publicclassCustomCellStyleHandlerimplementsCellWriteHandler{
@Override
publicvoidbeforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead){
// 可以在这里创建单元格时进行一些预处理操作
    }

@Override
publicvoidafterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead){
// 可以在这里对新创建的单元格进行一些初始化操作
    }

@Override
publicvoidafterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead){
// 可以在这里对转换后的数据进行一些操作
    }

@Override
publicvoidafterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead){
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
if (isHead) {
// 表头样式
            CellStyle cellStyle = workbook.createCellStyle();
            Font font = workbook.createFont();
            font.setFontName("黑体");
            font.setFontHeightInPoints((short14);
            font.setBold(true);
            cellStyle.setFont(font);
            cellStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
            cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            cellStyle.setAlignment(HorizontalAlignment.CENTER);
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            cell.setCellStyle(cellStyle);
        } else {
// 内容样式
            CellStyle cellStyle = workbook.createCellStyle();
            Font font = workbook.createFont();
            font.setFontName("宋体");
            font.setFontHeightInPoints((short12);
            cellStyle.setFont(font);
            cellStyle.setAlignment(HorizontalAlignment.CENTER);
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            cell.setCellStyle(cellStyle);
        }
    }
}

在上述代码中,我们实现了CellWriteHandler接口,并重写了afterCellDispose方法 。在该方法中,我们根据isHead参数判断当前单元格是表头还是内容,然后分别设置不同的样式 。对于表头,我们设置了字体为黑体、字号 14、加粗、浅蓝色背景、水平和垂直居中对齐;对于内容,我们设置了字体为宋体、字号 12、水平和垂直居中对齐 。

使用自定义样式时,需要在导出 Excel 文件时注册该处理器 :


import com.alibaba.excel.EasyExcel;

import java.util.ArrayList;
import java.util.List;

publicclassStyleExporter{
publicstaticvoidmain(String[] args){
// 模拟数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("张三"20"男"));
        userList.add(new User("李四"22"女"));
        userList.add(new User("王五"25"男"));

// 导出文件路径
        String fileName = "styled_users.xlsx";

// 写入Excel文件并注册自定义样式处理器
        EasyExcel.write(fileName, User.class)
               .registerWriteHandler(newCustomCellStyleHandler())
               .sheet("用户信息")
               .doWrite(userList)
;

        System.out.println("Excel文件导出成功!");
    }
}

通过上述代码,我们在导出 Excel 文件时注册了CustomCellStyleHandler处理器,从而实现了自定义样式的设置 。

(二)Apache POI 自定义样式

Apache POI 通过创建CellStyle对象,并设置其属性,如字体、颜色、对齐方式、边框等,来实现自定义样式 。下面是一个简单的示例代码 :


import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

publicclassPOIStyleExporter{
publicstaticvoidmain(String[] args){
// 模拟数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("张三"20"男"));
        userList.add(new User("李四"22"女"));
        userList.add(new User("王五"25"男"));

// 创建工作簿
        Workbook workbook = new XSSFWorkbook();
// 创建工作表
        Sheet sheet = workbook.createSheet("用户信息");

// 创建表头行样式
        CellStyle headerStyle = workbook.createCellStyle();
        Font headerFont = workbook.createFont();
        headerFont.setFontName("黑体");
        headerFont.setFontHeightInPoints((short14);
        headerFont.setBold(true);
        headerStyle.setFont(headerFont);
        headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        headerStyle.setAlignment(HorizontalAlignment.CENTER);
        headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);

// 创建表头行
        Row headerRow = sheet.createRow(0);
        String[] headers = {"姓名""年龄""性别"};
for (int i = 0; i < headers.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(headers[i]);
            cell.setCellStyle(headerStyle);
        }

// 创建内容行样式
        CellStyle contentStyle = workbook.createCellStyle();
        Font contentFont = workbook.createFont();
        contentFont.setFontName("宋体");
        contentFont.setFontHeightInPoints((short12);
        contentStyle.setFont(contentFont);
        contentStyle.setAlignment(HorizontalAlignment.CENTER);
        contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);

// 写入数据行
for (int i = 0; i < userList.size(); i++) {
            User user = userList.get(i);
            Row dataRow = sheet.createRow(i + 1);
            dataRow.createCell(0).setCellValue(user.getName());
            dataRow.createCell(1).setCellValue(user.getAge());
            dataRow.createCell(2).setCellValue(user.getGender());

// 应用内容行样式
for (int j = 0; j < headers.length; j++) {
                dataRow.getCell(j).setCellStyle(contentStyle);
            }
        }

// 自动调整列宽
for (int i = 0; i < headers.length; i++) {
            sheet.autoSizeColumn(i);
        }

// 保存文件
try (FileOutputStream fileOut = new FileOutputStream("poi_styled_users.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在上述代码中,我们分别创建了表头行样式和内容行样式,然后在创建表头行和数据行时,将相应的样式应用到单元格上 。

与 EasyExcel 相比,Apache POI 的自定义样式方式更加底层,需要手动创建和设置CellStyleFont等对象,代码相对繁琐 。而 EasyExcel 通过实现接口的方式,将样式设置的逻辑封装在处理器中,代码更加简洁和易于维护 。但在一些复杂的样式需求场景下,Apache POI 由于其更底层的操作方式,可能会具有更高的灵活性 。

六、总结与展望

在 Java 开发中,导出 Excel 文件是一个常见且实用的功能。通过本文,我们详细介绍了 Java 中导出 Excel 的常用工具 Apache POI 和 EasyExcel ,并给出了具体的使用示例 。同时,还探讨了如何处理大数据量的 Excel 导出以及如何自定义 Excel 的样式 。

Apache POI 作为一个强大的操作 Microsoft Office 格式文件的 API,提供了丰富的功能和灵活的操作方式,能够满足各种复杂的 Excel 操作需求 。而 EasyExcel 则在 Apache POI 的基础上进行了封装,简化了 Excel 数据的读写操作,特别适合处理大量数据的导入导出,具有高性能、简单易用、占用内存小等优点 。

在实际项目中,我们应根据具体的需求和场景选择合适的工具和方法 。如果数据量较小,对 Excel 的样式和格式要求较高,且需要进行复杂的操作,那么 Apache POI 可能是一个不错的选择 。而当数据量较大,对性能和内存占用有较高要求时,EasyExcel 则更具优势 。

随着技术的不断发展,相信未来会有更多更优秀的 Excel 处理工具和技术出现,为我们的开发工作带来更多的便利 。希望大家在实际项目中能够灵活运用所学知识,不断探索和实践,解决各种实际问题 。如果在导出 Excel 的过程中遇到任何问题,欢迎在评论区留言交流 。

我的产品

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-05 03:30:03 HTTP/2.0 GET : https://h.sjds.net/a/478198.html
  2. 运行时间 : 0.151851s [ 吞吐率:6.59req/s ] 内存消耗:4,636.40kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d427e719fc444833e7ca117b21323d7a
  1. /yingpanguazai/ssd/ssd1/www/h.sjds.net/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/h.sjds.net/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/h.sjds.net/runtime/temp/ad153693ed39fba6d1bda2fe72512cde.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000860s ] mysql:host=127.0.0.1;port=3306;dbname=h_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000744s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000299s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000336s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000540s ]
  6. SELECT * FROM `set` [ RunTime:0.000200s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000526s ]
  8. SELECT * FROM `article` WHERE `id` = 478198 LIMIT 1 [ RunTime:0.000956s ]
  9. UPDATE `article` SET `lasttime` = 1775331003 WHERE `id` = 478198 [ RunTime:0.001109s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000241s ]
  11. SELECT * FROM `article` WHERE `id` < 478198 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000399s ]
  12. SELECT * FROM `article` WHERE `id` > 478198 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000364s ]
  13. SELECT * FROM `article` WHERE `id` < 478198 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000623s ]
  14. SELECT * FROM `article` WHERE `id` < 478198 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000639s ]
  15. SELECT * FROM `article` WHERE `id` < 478198 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000815s ]
0.153440s