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 方法)。

总结

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

相关文章

  • 火遍全网的Hutool使用Builder模式创建线程池的方法

    火遍全网的Hutool使用Builder模式创建线程池的方法

    这篇文章主要介绍了火遍全网的Hutool使用Builder模式创建线程池的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java如何判断字符串中是否包含某个字符

    Java如何判断字符串中是否包含某个字符

    这篇文章主要介绍了Java如何判断字符串中是否包含某个字符,可以使用String类的contains()方法,另一种方法使用String类的indexOf方法,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • 使用Java将Excel转换为Text的实现方法

    使用Java将Excel转换为Text的实现方法

    在日常的数据处理和系统集成中,我们经常会遇到需要将Excel文件中的数据提取出来,并以纯文本格式进行处理的场景,将Excel转换为Text是一项基础而重要的任务,本文将向您介绍如何利用强大的 Spire.XLS for Java 库,在Java应用程序中轻松实现Excel到Text的转换
    2025-10-10
  • Spring不能注入Static变量的原因及Spring注入静态变量

    Spring不能注入Static变量的原因及Spring注入静态变量

    这篇文章主要介绍了Spring不能注入Static变量的原因及Spring注入静态变量,需要的朋友可以参考下
    2016-01-01
  • Java中Integer的parseInt和valueOf的区别详解

    Java中Integer的parseInt和valueOf的区别详解

    这篇文章主要介绍了Java中Integer的parseInt和valueOf的区别详解,nteger.parseInt(s)是把字符串解析成int基本类型,Integer.valueOf(s)是把字符串解析成Integer对象类型,其实int就是Integer解包装,Integer就是int的包装,需要的朋友可以参考下
    2023-11-11
  • Java多线程之Callable接口的实现

    Java多线程之Callable接口的实现

    这篇文章主要介绍了Java多线程之Callable接口的实现,Callable和Runnbale一样代表着任务,区别在于Callable有返回值并且可以抛出异常。感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Spring JPA整合QueryDSL的示例代码

    Spring JPA整合QueryDSL的示例代码

    这篇文章主要介绍了Spring JPA整合QueryDSL的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • java开发web前端cookie session及token会话机制详解

    java开发web前端cookie session及token会话机制详解

    如果把人体比作一个web系统的话,cookie、session和token就好像人体的经络和血管一样,而web系统中的数据,就好像人体的血液一样。血液依靠着血管在人体内流动,就如数据根据cookie和session机制在web系统中流动一样
    2021-10-10
  • Java并发中线程封闭知识点详解

    Java并发中线程封闭知识点详解

    在本篇文章里我们给大家整理了关于Java并发中线程封闭的知识点总结内容,需要的朋友们学习参考下。
    2019-07-07
  • 解决spring-boot-maven-plugin报红的问题

    解决spring-boot-maven-plugin报红的问题

    这篇文章主要给大家介绍一下如何解决spring-boot-maven-plugin报红的问题,文中通过图文讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08

最新评论