java讀取excel文件為base64實(shí)現(xiàn)方式
使用 Apache POI 讀取 Excel 并轉(zhuǎn)換為 Base64
Apache POI 是一個(gè)流行的 Java 庫,用于操作 Microsoft Office 格式文件(如 Excel)。以下方法將 Excel 文件讀取為字節(jié)數(shù)組,再轉(zhuǎn)換為 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>
代碼實(shí)現(xiàn)
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 文件為字節(jié)數(shù)組
FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = WorkbookFactory.create(fis);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
byte[] excelBytes = bos.toByteArray();
// 關(guān)閉資源
bos.close();
workbook.close();
fis.close();
// 轉(zhuǎn)換為 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,其內(nèi)存占用更低。
依賴配置(Maven)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
代碼實(shí)現(xiàn)
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) + "...");
}
}
注意事項(xiàng)
- 文件格式支持:示例代碼支持
.xlsx(Office 2007+)。若需處理.xls(舊格式),需調(diào)整WorkbookFactory邏輯。 - 內(nèi)存管理:處理大文件時(shí),確保及時(shí)關(guān)閉流(如
FileInputStream、Workbook)。 - Base64 換行:默認(rèn)情況下
Base64.getEncoder()不添加換行符。如需換行,改用Base64.getMimeEncoder()。
常見問題解決
亂碼問題
確保文件路徑正確,且 Excel 未被其他進(jìn)程占用。若報(bào) InvalidHeaderException,檢查文件是否損壞。
性能優(yōu)化
對于超大文件,建議分塊讀取或使用流式 API(如 EasyExcel 的 read 方法)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
火遍全網(wǎng)的Hutool使用Builder模式創(chuàng)建線程池的方法
這篇文章主要介紹了火遍全網(wǎng)的Hutool使用Builder模式創(chuàng)建線程池的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
使用Java將Excel轉(zhuǎn)換為Text的實(shí)現(xiàn)方法
在日常的數(shù)據(jù)處理和系統(tǒng)集成中,我們經(jīng)常會(huì)遇到需要將Excel文件中的數(shù)據(jù)提取出來,并以純文本格式進(jìn)行處理的場景,將Excel轉(zhuǎn)換為Text是一項(xiàng)基礎(chǔ)而重要的任務(wù),本文將向您介紹如何利用強(qiáng)大的 Spire.XLS for Java 庫,在Java應(yīng)用程序中輕松實(shí)現(xiàn)Excel到Text的轉(zhuǎn)換2025-10-10
Spring不能注入Static變量的原因及Spring注入靜態(tài)變量
這篇文章主要介紹了Spring不能注入Static變量的原因及Spring注入靜態(tài)變量,需要的朋友可以參考下2016-01-01
Java中Integer的parseInt和valueOf的區(qū)別詳解
這篇文章主要介紹了Java中Integer的parseInt和valueOf的區(qū)別詳解,nteger.parseInt(s)是把字符串解析成int基本類型,Integer.valueOf(s)是把字符串解析成Integer對象類型,其實(shí)int就是Integer解包裝,Integer就是int的包裝,需要的朋友可以參考下2023-11-11
Java多線程之Callable接口的實(shí)現(xiàn)
這篇文章主要介紹了Java多線程之Callable接口的實(shí)現(xiàn),Callable和Runnbale一樣代表著任務(wù),區(qū)別在于Callable有返回值并且可以拋出異常。感興趣的小伙伴們可以參考一下2018-08-08
java開發(fā)web前端cookie session及token會(huì)話機(jī)制詳解
如果把人體比作一個(gè)web系統(tǒng)的話,cookie、session和token就好像人體的經(jīng)絡(luò)和血管一樣,而web系統(tǒng)中的數(shù)據(jù),就好像人體的血液一樣。血液依靠著血管在人體內(nèi)流動(dòng),就如數(shù)據(jù)根據(jù)cookie和session機(jī)制在web系統(tǒng)中流動(dòng)一樣2021-10-10
Java并發(fā)中線程封閉知識(shí)點(diǎn)詳解
在本篇文章里我們給大家整理了關(guān)于Java并發(fā)中線程封閉的知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們學(xué)習(xí)參考下。2019-07-07
解決spring-boot-maven-plugin報(bào)紅的問題
這篇文章主要給大家介紹一下如何解決spring-boot-maven-plugin報(bào)紅的問題,文中通過圖文講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-08-08

