java读取excel文件为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逻辑。 - 内存管理:处理大文件时,确保及时关闭流(如
FileInputStream、Workbook)。 - Base64 换行:默认情况下
Base64.getEncoder()不添加换行符。如需换行,改用Base64.getMimeEncoder()。
常见问题解决
乱码问题
确保文件路径正确,且 Excel 未被其他进程占用。若报 InvalidHeaderException,检查文件是否损坏。
性能优化
对于超大文件,建议分块读取或使用流式 API(如 EasyExcel 的 read 方法)。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
火遍全网的Hutool使用Builder模式创建线程池的方法
这篇文章主要介绍了火遍全网的Hutool使用Builder模式创建线程池的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-03-03
Spring不能注入Static变量的原因及Spring注入静态变量
这篇文章主要介绍了Spring不能注入Static变量的原因及Spring注入静态变量,需要的朋友可以参考下2016-01-01
Java中Integer的parseInt和valueOf的区别详解
这篇文章主要介绍了Java中Integer的parseInt和valueOf的区别详解,nteger.parseInt(s)是把字符串解析成int基本类型,Integer.valueOf(s)是把字符串解析成Integer对象类型,其实int就是Integer解包装,Integer就是int的包装,需要的朋友可以参考下2023-11-11
java开发web前端cookie session及token会话机制详解
如果把人体比作一个web系统的话,cookie、session和token就好像人体的经络和血管一样,而web系统中的数据,就好像人体的血液一样。血液依靠着血管在人体内流动,就如数据根据cookie和session机制在web系统中流动一样2021-10-10
解决spring-boot-maven-plugin报红的问题
这篇文章主要给大家介绍一下如何解决spring-boot-maven-plugin报红的问题,文中通过图文讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下2023-08-08


最新评论