Java輕松實(shí)現(xiàn)Excel與CSV格式互轉(zhuǎn)(含批量轉(zhuǎn)換)
在 Java 開發(fā)中,經(jīng)常會(huì)遇到需要在 Excel 和 CSV 文件之間進(jìn)行數(shù)據(jù)轉(zhuǎn)換的場(chǎng)景。CSV 格式簡(jiǎn)單輕量,便于系統(tǒng)間數(shù)據(jù)交換和快速處理;而 Excel 格式支持豐富的表格樣式、公式和多工作表功能,便于分析和報(bào)表生成。
不管是將 Excel 數(shù)據(jù)導(dǎo)出為 CSV 提供給其他系統(tǒng),還是將 CSV 文件導(dǎo)入 Excel 以便分析,掌握高效的 Excel 轉(zhuǎn) CSV 以及 CSV 轉(zhuǎn) Excel 方法都是開發(fā)者必備技能。本文將分享如何在 Java 中實(shí)現(xiàn)單文件和批量的 Excel 與 CSV 轉(zhuǎn)換方法,包含完整可運(yùn)行的示例代碼。
一、準(zhǔn)備環(huán)境
Java 本身不直接提供完整的 Excel 操作接口,因此通常需要借助第三方庫(kù)來處理。Spire.XLS for Java 是一個(gè)功能完善的 Java Excel 庫(kù),支持讀取、寫入和轉(zhuǎn)換 Excel 文件,并且能夠直接將 Excel 文件轉(zhuǎn)換為 CSV,也能將 CSV 數(shù)據(jù)生成 Excel 文件。其 API 簡(jiǎn)單直觀,非常適合開發(fā)者在項(xiàng)目中使用。
在開始操作前,需要在項(xiàng)目中引入 Spire.XLS for Java 的依賴。如果使用 Maven,可以在 pom.xml 中添加:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>15.8.3</version>
</dependency>
</dependencies>
安裝好依賴后,就可以開始進(jìn)行 Excel 與 CSV 的轉(zhuǎn)換。
二、Excel 轉(zhuǎn) CSV
將 Excel 文件轉(zhuǎn)換為 CSV 通常是最常見的需求,尤其是當(dāng)需要將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)或提供給其他系統(tǒng)處理時(shí)。操作步驟主要包括:加載 Excel 文件、計(jì)算公式、獲取工作表、導(dǎo)出為 CSV 文件。
下面是一個(gè)簡(jiǎn)單示例:
import com.spire.xls.*;
import java.nio.charset.Charset;
public class ExcelToCSV {
public static void main(String[] args) {
Workbook workbook = new Workbook();
workbook.loadFromFile("test.xlsx");
workbook.calculateAllValue();
Worksheet sheet = workbook.getWorksheets().get(0);
sheet.saveToFile("ExcelToCSV.csv", ",", Charset.forName("UTF-8"));
}
}
上述代碼中,Workbook.loadFromFile 可加載 .xls 或 .xlsx 文件,saveToFile 方法可直接指定輸出格式為 CSV,無需手動(dòng)解析每個(gè)單元格。對(duì)于包含多個(gè)工作表的 Excel 文件,需要遍歷每個(gè)工作表,并將其分別保存為 CSV 文件。
三、CSV 轉(zhuǎn) Excel
將 CSV 文件導(dǎo)入 Excel 便于統(tǒng)計(jì)分析或生成報(bào)表。Spire.XLS 提供了靈活的方法來讀取 CSV,并且可自動(dòng)調(diào)整格式和轉(zhuǎn)換后的 Excel 文件的行高和列寬。
import com.spire.xls.*;
import java.util.EnumSet;
public class CSVToExcel {
public static void main(String[] args) {
Workbook workbook = new Workbook();
workbook.loadFromFile("sample.csv", ",", 1, 1);
Worksheet sheet = workbook.getWorksheets().get(0);
sheet.getCellRange("A1:D6").setIgnoreErrorOptions(EnumSet.of(IgnoreErrorType.NumberAsText));
sheet.getAllocatedRange().autoFitColumns();
sheet.getAllocatedRange().autoFitRows();
workbook.saveToFile("CSVToExcel.xlsx", ExcelVersion.Version2013);
}
}
通過忽略錯(cuò)誤和自動(dòng)調(diào)整列寬行高,可以確保生成的 Excel 文件美觀且易讀,同時(shí)避免常見錯(cuò)誤提示干擾。
四、處理特殊情況
字符編碼問題:CSV 文件可能使用不同的編碼格式(如 UTF-8、GBK),需要確保讀取和保存時(shí)使用一致編碼。
大文件處理:Excel 或 CSV 文件較大時(shí),可以分批處理,避免內(nèi)存占用過高。
多工作表轉(zhuǎn)換:如果 Excel 文件包含多個(gè)工作表,可以通過循環(huán)遍歷工作表,分別生成多個(gè) CSV 文件。
五、批量 Excel 和 CSV 相互轉(zhuǎn)換
批量 Excel 轉(zhuǎn) CSV
import com.spire.xls.*;
import java.io.File;
import java.nio.charset.Charset;
public class BatchExcelToCSV {
public static void main(String[] args) {
File folder = new File("excel_files");
File[] files = folder.listFiles((dir, name) -> name.endsWith(".xls") || name.endsWith(".xlsx"));
for (File file : files) {
try {
Workbook workbook = new Workbook();
workbook.loadFromFile(file.getAbsolutePath());
workbook.calculateAllValue();
Worksheet sheet = workbook.getWorksheets().get(0);
String csvFile = "csv_output/" + file.getName().replaceAll("\.xls[x]?$", ".csv");
sheet.saveToFile(csvFile, ",", Charset.forName("UTF-8"));
System.out.println(file.getName() + " 已轉(zhuǎn)換為 CSV");
} catch (Exception e) {
System.err.println(file.getName() + " 轉(zhuǎn)換失?。? + e.getMessage());
}
}
}
}
批量 CSV 轉(zhuǎn) Excel
import com.spire.xls.*;
import java.io.File;
import java.util.EnumSet;
public class BatchCSVToExcel {
public static void main(String[] args) {
File folder = new File("csv_files");
File[] files = folder.listFiles((dir, name) -> name.endsWith(".csv"));
for (File file : files) {
try {
Workbook workbook = new Workbook();
workbook.loadFromFile(file.getAbsolutePath(), ",", 1, 1);
Worksheet sheet = workbook.getWorksheets().get(0);
sheet.getCellRange("A1:" + sheet.getAllocatedRange().getLastRow() + sheet.getAllocatedRange().getLastColumn())
.setIgnoreErrorOptions(EnumSet.of(IgnoreErrorType.NumberAsText));
sheet.getAllocatedRange().autoFitColumns();
sheet.getAllocatedRange().autoFitRows();
String excelFile = "excel_output/" + file.getName().replace(".csv", ".xlsx");
workbook.saveToFile(excelFile, ExcelVersion.Version2013);
System.out.println(file.getName() + " 已轉(zhuǎn)換為 Excel");
} catch (Exception e) {
System.err.println(file.getName() + " 轉(zhuǎn)換失?。? + e.getMessage());
}
}
}
}
通過批量處理,可以一次性完成大量文件的轉(zhuǎn)換,提高開發(fā)效率。
六、總結(jié)
使用 Java 實(shí)現(xiàn) Excel 與 CSV 的相互轉(zhuǎn)換,可以極大地提高數(shù)據(jù)處理效率。借助 Spire.XLS for Java,開發(fā)者可以方便地完成 Excel 與 CSV 的加載、保存和格式轉(zhuǎn)換,而無需手動(dòng)解析單元格或編寫復(fù)雜邏輯。
到此這篇關(guān)于Java輕松實(shí)現(xiàn)Excel與CSV格式互轉(zhuǎn)(含批量轉(zhuǎn)換)的文章就介紹到這了,更多相關(guān)Java Excel與CSV互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring中向一個(gè)單例bean中注入非單例bean的方法詳解
Spring是先將Bean對(duì)象實(shí)例化之后,再設(shè)置對(duì)象屬性,所以會(huì)先調(diào)用他的無參構(gòu)造函數(shù)實(shí)例化,每個(gè)對(duì)象存在一個(gè)map中,當(dāng)遇到依賴,就去map中調(diào)用對(duì)應(yīng)的單例對(duì)象,這篇文章主要給大家介紹了關(guān)于spring中向一個(gè)單例bean中注入非單例bean的相關(guān)資料,需要的朋友可以參考下2021-07-07
Java 異步實(shí)現(xiàn)的幾種方式小結(jié)
這篇文章主要介紹了Java 異步實(shí)現(xiàn)的幾種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
探索HttpClient中的close方法及其對(duì)連接的影響
這篇文章主要為大家介紹了HttpClient中的close方法及其對(duì)連接的影響探索分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
詳解java.lang.reflect.Modifier.isInterface()方法
這篇文章主要介紹了詳解java.lang.reflect.Modifier.isInterface()方法的相關(guān)資料,這里提供實(shí)例幫助大家理解這個(gè)方法的使用,需要的朋友可以參考下2017-09-09
BufferedReader中read()方法和readLine()方法的使用
這篇文章主要介紹了BufferedReader中read()方法和readLine()方法的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Java實(shí)現(xiàn)驗(yàn)證碼驗(yàn)證功能
Java如何實(shí)現(xiàn)驗(yàn)證碼驗(yàn)證功能呢?日常生活中,驗(yàn)證碼隨處可見,他可以在一定程度上保護(hù)賬號(hào)安全,那么他是怎么實(shí)現(xiàn)的呢?今天通過本文給大家實(shí)例詳解,需要的朋友參考下2017-02-02
Spring Boot 約定大于配置之如何實(shí)現(xiàn)自定義配置
本文介紹了SpringBoot的“約定大于配置”理念以及如何實(shí)現(xiàn)自定義配置,通過實(shí)現(xiàn)接口和添加@Configuration注解,開發(fā)者可以靈活地?cái)U(kuò)展和定制SpringBoot的默認(rèn)行為,感興趣的朋友一起看看吧2025-03-03
SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送的詳細(xì)過程
日常開發(fā)過程中,我們經(jīng)常需要使用到郵件發(fā)送任務(wù),比方說驗(yàn)證碼的發(fā)送、日常信息的通知等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送的詳細(xì)過程,需要的朋友可以參考下2022-10-10
在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決
這篇文章主要介紹了在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

