Java輕松實(shí)現(xiàn)Excel與CSV格式互轉(zhuǎn)(含批量轉(zhuǎn)換)
在 Java 開(kāi)發(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 方法都是開(kāi)發(fā)者必備技能。本文將分享如何在 Java 中實(shí)現(xiàn)單文件和批量的 Excel 與 CSV 轉(zhuǎn)換方法,包含完整可運(yùn)行的示例代碼。
一、準(zhǔn)備環(huán)境
Java 本身不直接提供完整的 Excel 操作接口,因此通常需要借助第三方庫(kù)來(lái)處理。Spire.XLS for Java 是一個(gè)功能完善的 Java Excel 庫(kù),支持讀取、寫(xiě)入和轉(zhuǎn)換 Excel 文件,并且能夠直接將 Excel 文件轉(zhuǎn)換為 CSV,也能將 CSV 數(shù)據(jù)生成 Excel 文件。其 API 簡(jiǎn)單直觀,非常適合開(kāi)發(fā)者在項(xiàng)目中使用。
在開(kāi)始操作前,需要在項(xiàng)目中引入 Spire.XLS for Java 的依賴(lài)。如果使用 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>
安裝好依賴(lài)后,就可以開(kāi)始進(jìn)行 Excel 與 CSV 的轉(zhuǎn)換。
二、Excel 轉(zhuǎn) CSV
將 Excel 文件轉(zhuǎn)換為 CSV 通常是最常見(jiàn)的需求,尤其是當(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,無(wú)需手動(dòng)解析每個(gè)單元格。對(duì)于包含多個(gè)工作表的 Excel 文件,需要遍歷每個(gè)工作表,并將其分別保存為 CSV 文件。
三、CSV 轉(zhuǎn) Excel
將 CSV 文件導(dǎo)入 Excel 便于統(tǒng)計(jì)分析或生成報(bào)表。Spire.XLS 提供了靈活的方法來(lái)讀取 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);
}
}
通過(guò)忽略錯(cuò)誤和自動(dòng)調(diào)整列寬行高,可以確保生成的 Excel 文件美觀且易讀,同時(shí)避免常見(jiàn)錯(cuò)誤提示干擾。
四、處理特殊情況
字符編碼問(wèn)題:CSV 文件可能使用不同的編碼格式(如 UTF-8、GBK),需要確保讀取和保存時(shí)使用一致編碼。
大文件處理:Excel 或 CSV 文件較大時(shí),可以分批處理,避免內(nèi)存占用過(guò)高。
多工作表轉(zhuǎn)換:如果 Excel 文件包含多個(gè)工作表,可以通過(guò)循環(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());
}
}
}
}
通過(guò)批量處理,可以一次性完成大量文件的轉(zhuǎn)換,提高開(kāi)發(fā)效率。
六、總結(jié)
使用 Java 實(shí)現(xiàn) Excel 與 CSV 的相互轉(zhuǎn)換,可以極大地提高數(shù)據(jù)處理效率。借助 Spire.XLS for Java,開(kāi)發(fā)者可以方便地完成 Excel 與 CSV 的加載、保存和格式轉(zhuǎn)換,而無(wú)需手動(dòng)解析單元格或編寫(xiě)復(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)文章
java中List數(shù)組用逗號(hào)分隔開(kāi)轉(zhuǎn)成字符串2種方法
在我們?nèi)粘i_(kāi)發(fā)中,在前后端交互的時(shí)候會(huì)遇到多個(gè)id或其他字段存放到一個(gè)字段中,這時(shí)我們會(huì)遇到一個(gè)List(集合)---->String(單個(gè)字段),這篇文章主要給大家介紹了關(guān)于java中List數(shù)組用逗號(hào)分隔開(kāi)轉(zhuǎn)成字符串的2種方法,需要的朋友可以參考下2023-10-10
Java編程利用socket多線程訪問(wèn)服務(wù)器文件代碼示例
這篇文章主要介紹了Java編程利用socket多線程訪問(wèn)服務(wù)器文件代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
mybatis利用association或collection傳遞多參數(shù)子查詢(xún)
今天小編就為大家分享一篇關(guān)于mybatis利用association或collection傳遞多參數(shù)子查詢(xún),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
Spring中@Value設(shè)置默認(rèn)值問(wèn)題解決
本文主要介紹了Spring中@Value設(shè)置默認(rèn)值問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
synchronized?和?Lock?的異同點(diǎn)(如何讓選擇)
這篇文章主要介紹了?synchronized和Lock的異同點(diǎn)(如何讓選擇),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
詳解Servlet入門(mén)級(jí)設(shè)置(超詳細(xì) IDEA2020版)
這篇文章主要介紹了詳解Servlet入門(mén)級(jí)設(shè)置(超詳細(xì) IDEA2020版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

