使用Java實(shí)現(xiàn)將Excel工作表轉(zhuǎn)換為CSV格式
在日常開發(fā)中,Excel 文件(.xls/.xlsx)是數(shù)據(jù)存儲和交換的常用格式,但在數(shù)據(jù)導(dǎo)入、批量處理等場景下,輕量且純文本的 CSV 格式更具優(yōu)勢。本文將介紹如何使用 Spire.XLS for Java 組件,高效實(shí)現(xiàn) Excel 文件到 CSV 格式的轉(zhuǎn)換,涵蓋環(huán)境準(zhǔn)備、核心步驟、完整代碼及關(guān)鍵說明,幫助開發(fā)者快速落地相關(guān)需求。
引入依賴(Maven方式)
在項目的pom.xml文件中添加Spire.XLS的依賴配置(查詢最新版本):
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>15.10.5</version>
</dependency>
Spire.XLS for Java兼容Excel 97-2021的所有版本格式。其API設(shè)計簡潔,封裝了復(fù)雜的Excel底層邏輯,代碼簡單易懂。
Excel 轉(zhuǎn) CSV 核心實(shí)現(xiàn)步驟
Excel轉(zhuǎn)CSV的核心邏輯是:加載Excel文件 → 定位目標(biāo)工作表 → 調(diào)用轉(zhuǎn)換API保存為CSV格式。以下分 “單工作表轉(zhuǎn)換” 和 “多工作表批量轉(zhuǎn)換” 兩種場景展開。
場景1:單個工作表轉(zhuǎn)換為CSV
適用于僅需提取Excel中某一個工作表(如第一個工作表)數(shù)據(jù)的場景,代碼如下:
import com.spire.xls.*;
import java.nio.charset.Charset;
public class ExcelToCsvSingleSheet {
public static void main(String[] args) {
// 創(chuàng)建Workbook對象,加載Excel文件
Workbook workbook = new Workbook();
workbook.loadFromFile("E:\\PythonExcel\\產(chǎn)品.xlsx");
// 獲取目標(biāo)工作表(索引從0開始,0表示第一個工作表)
Worksheet worksheet = workbook.getWorksheets().get(0);
// (可選)若已知工作表名稱,可通過名稱獲?。簑orkbook.getWorksheets().get("Sheet1")
// 將工作表保存為CSV格式,指定輸出路徑、分隔符和編碼(UTF-8避免中文亂碼)
worksheet.saveToFile("single_sheet.csv", ",", Charset.forName("UTF-8"));
// 釋放資源
workbook.dispose();
}
}
代碼說明
- 加載Excel文件:
Workbook是Spire.XLS的核心類,負(fù)責(zé)Excel文件的整體管理,loadFromFile()方法支持加載.xls和.xlsx格式; - 獲取工作表:通過索引(
get(0))或名稱(get("Sheet1"))定位工作表,需確保索引不越界(若Excel只有1個工作表,索引最大為0); - 保存為CSV:
saveToFile()的第三個參數(shù)指定編碼(推薦UTF-8,避免中文亂碼),若不指定編碼,默認(rèn)使用系統(tǒng)編碼(可能導(dǎo)致亂碼)。
CSV 輸出文件:

場景2:多工作表批量轉(zhuǎn)換為CSV
若Excel文件包含多個工作表,需將每個工作表單獨(dú)轉(zhuǎn)為CSV(如Sheet1.csv、Sheet2.csv),可通過遍歷工作表實(shí)現(xiàn)批量轉(zhuǎn)換:
import com.spire.xls.*;
import java.nio.charset.Charset;
public class ExcelToCsvMultiSheets {
public static void main(String[] args) {
// 加載Excel文件
Workbook workbook = new Workbook();
workbook.loadFromFile("E:\\PythonExcel\\數(shù)據(jù)表.xlsx");
// 遍歷所有工作表
for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
Worksheet worksheet = workbook.getWorksheets().get(i);
// 獲取工作表名稱,作為CSV文件名的一部分
String sheetName = worksheet.getName();
// 定義CSV輸出路徑
String csvOutputPath = "Output/" + sheetName + ".csv";
// 保存為CSV
worksheet.saveToFile(csvOutputPath,",", Charset.forName("UTF-8"));
}
// 釋放資源
workbook.dispose();
}
}
自定義CSV分隔符:部分場景需用分號(;)或制表符(\t)作為 CSV 分隔符,可通過saveToFile()的第二個參數(shù)指定
關(guān)鍵注意事項
- 編碼問題:CSV 文件的編碼需與后續(xù)使用場景匹配(如導(dǎo)入數(shù)據(jù)庫時需與數(shù)據(jù)庫編碼一致)。若出現(xiàn)中文亂碼,優(yōu)先嘗試
UTF-8編碼; - 數(shù)據(jù)格式保留:轉(zhuǎn)換為 CSV 后,會以 Excel 中“顯示值”保存(如 “12.34%” 會轉(zhuǎn)為 “12.34%”,而非原始數(shù)值0.1234);
- 空值與空白行:Spire.XLS 會保留 Excel 中的空單元格(CSV 中以 “,” 分隔空值),但會自動過濾工作表末尾的空白行(無數(shù)據(jù)的行);
Spire.XLS for Java 為 Excel 到 CSV 的轉(zhuǎn)換提供了簡潔、高效的解決方案,開發(fā)者無需關(guān)注 Excel 底層解析細(xì)節(jié),僅通過少量 API 即可完成轉(zhuǎn)換需求。在實(shí)際使用中,需注意編碼匹配、數(shù)據(jù)格式保留等問題。
到此這篇關(guān)于使用Java實(shí)現(xiàn)將Excel工作表轉(zhuǎn)換為CSV格式的文章就介紹到這了,更多相關(guān)Java Excel工作表轉(zhuǎn)CSV內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用Java將Excel轉(zhuǎn)換為Text的實(shí)現(xiàn)方法
- Java將Word、Excel、PDF和PPT轉(zhuǎn)換為OFD格式的詳細(xì)步驟
- 基于Java實(shí)將現(xiàn)Excel轉(zhuǎn)換為HTML
- Java實(shí)現(xiàn)集合和Excel文件相互轉(zhuǎn)換
- Java高效實(shí)現(xiàn)excel轉(zhuǎn)pdf(支持帶圖片的轉(zhuǎn)換)
- java實(shí)現(xiàn)Excel轉(zhuǎn)換為圖片
- Java實(shí)現(xiàn)快速將HTML表格轉(zhuǎn)換成Excel
- Java中實(shí)現(xiàn)Excel數(shù)字與文本轉(zhuǎn)換的示例代碼
相關(guān)文章
SpringBoot使用Kafka來優(yōu)化接口請求的并發(fā)方式
這篇文章主要介紹了SpringBoot使用Kafka來優(yōu)化接口請求的并發(fā)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
詳解Java中實(shí)現(xiàn)SHA1與MD5加密算法的基本方法
這篇文章主要介紹了詳解Java中實(shí)現(xiàn)SHA1與MD5加密算法的基本方法,安全哈希算法第一版和消息摘要算法第五版也是通常人們最常用的加密算法,需要的朋友可以參考下2016-04-04
java 判斷一個數(shù)組中的數(shù)值是否連續(xù)相鄰的方法
下面小編就為大家分享一篇java 判斷一個數(shù)組中的數(shù)值是否連續(xù)相鄰的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Java多線程編程中使用Condition類操作鎖的方法詳解
Condition是java.util.concurrent.locks包下的類,提供了對線程鎖的更精細(xì)的控制方法,下面我們就來看一下Java多線程編程中使用Condition類操作鎖的方法詳解2016-07-07

