java读取excel文件为base64实现方式

 更新时间:2025年09月21日 15:55:21   作者:night_gu  
文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意文件格式支持、流关闭、Base64编码方式选择及常见问题处理,如乱码、文件损坏等,同时建议优化性能时采用分块读取

使用 Apache POI 读取 Excel 并转换为 Base64

Apache POI 是一个流行的 Java 库,用于操作 Microsoft Office 格式文件(如 Excel)。以下方法将 Excel 文件读取为字节数组,再转换为 Base64 字符串。

依赖配置(Maven)

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

代码实现

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;

public class ExcelToBase64 {

    public static String convertExcelToBase64(String filePath) throws IOException {
        // 读取 Excel 文件为字节数组
        FileInputStream fis = new FileInputStream(filePath);
        Workbook workbook = WorkbookFactory.create(fis);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        workbook.write(bos);
        byte[] excelBytes = bos.toByteArray();

        // 关闭资源
        bos.close();
        workbook.close();
        fis.close();

        // 转换为 Base64
        return Base64.getEncoder().encodeToString(excelBytes);
    }

    public static void main(String[] args) {
        try {
            String base64 = convertExcelToBase64("example.xlsx");
            System.out.println("Base64: " + base64);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 EasyExcel 处理大文件

若需处理大型 Excel 文件,可以使用阿里开源的 EasyExcel,其内存占用更低。

依赖配置(Maven)

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

代码实现

import com.alibaba.excel.EasyExcel;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;

public class ExcelToBase64Easy {

    public static String convertToBase64(String filePath) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        EasyExcel.write(bos).withTemplate(new FileInputStream(filePath)).sheet().doWrite();
        byte[] bytes = bos.toByteArray();
        bos.close();
        return Base64.getEncoder().encodeToString(bytes);
    }

    public static void main(String[] args) throws IOException {
        String base64 = convertToBase64("large_file.xlsx");
        System.out.println("Base64: " + base64.substring(0, 50) + "...");
    }
}

注意事项

  • 文件格式支持:示例代码支持 .xlsx(Office 2007+)。若需处理 .xls(旧格式),需调整 WorkbookFactory 逻辑。
  • 内存管理:处理大文件时,确保及时关闭流(如 FileInputStreamWorkbook)。
  • Base64 换行:默认情况下 Base64.getEncoder() 不添加换行符。如需换行,改用 Base64.getMimeEncoder()

常见问题解决

乱码问题

确保文件路径正确,且 Excel 未被其他进程占用。若报 InvalidHeaderException,检查文件是否损坏。

性能优化

对于超大文件,建议分块读取或使用流式 API(如 EasyExcel 的 read 方法)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Windows 下安装配置 Eclipse详细教程

    Windows 下安装配置 Eclipse详细教程

    Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技术,受到了越来越多的开发者的欢迎。配合众多令人眼花缭乱的插件,完全可以满足从企业级Java应用到手机终端Java游戏的开发。本文将带您手把手步入Eclipse的广阔天地
    2016-09-09
  • Java实现FTP上传到服务器

    Java实现FTP上传到服务器

    这篇文章主要为大家详细介绍了Java实现FTP上传到服务器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • SpringBoot整合ShardingSphere5.x实现数据加解密功能(最新推荐)

    SpringBoot整合ShardingSphere5.x实现数据加解密功能(最新推荐)

    这篇文章主要介绍了SpringBoot整合ShardingSphere5.x实现数据加解密功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • list的4种遍历方式(实例讲解)

    list的4种遍历方式(实例讲解)

    下面小编就为大家带来一篇list的4种遍历方式(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Spring Boot整合RabbitMQ实例(Topic模式)

    Spring Boot整合RabbitMQ实例(Topic模式)

    Topic Exchange 转发消息主要是根据通配符。接下来通过本文给大家分享Spring Boot整合RabbitMQ实例(Topic模式),需要的朋友参考下吧
    2017-04-04
  • java实现文件上传下载至ftp服务器

    java实现文件上传下载至ftp服务器

    这篇文章主要为大家详细介绍了java实现文件上传下载至ftp服务器的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • SpringAOP 如何通过JoinPoint获取参数名和值

    SpringAOP 如何通过JoinPoint获取参数名和值

    这篇文章主要介绍了SpringAOP 通过JoinPoint获取参数名和值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • javax.validation包里@NotNull等注解的使用方式

    javax.validation包里@NotNull等注解的使用方式

    这篇文章主要介绍了javax.validation包里@NotNull等注解的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 基于SpringBoot加载Mybatis的TypeAlias问题

    基于SpringBoot加载Mybatis的TypeAlias问题

    这篇文章主要介绍了解决SpringBoot加载Mybatis的TypeAlias问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java创建与结束线程代码示例

    Java创建与结束线程代码示例

    这篇文章主要介绍了Java创建与结束线程代码示例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考。
    2017-10-10

最新评论