Java實(shí)現(xiàn)快速合并Excel工作表和文件
合并 Excel 文件是數(shù)據(jù)處理中非常常見(jiàn)的需求,但是在不同文件或表格中來(lái)回復(fù)制粘貼卻十分費(fèi)時(shí)費(fèi)力。那么有沒(méi)有更快的方法呢?其實(shí)只需要簡(jiǎn)單的 Java 代碼就能輕松實(shí)現(xiàn)批量合并 Excel。不管是整合多個(gè)工作表為一個(gè)文件,還是匯總不同 Excel 文件中的數(shù)據(jù),你都可以做到一鍵完成!
本文使用到的 Java 庫(kù)是 Spire.XLS for Java,這是一個(gè)專業(yè)且功能豐富的 Excel 組件,可以輕松處理 Excel 相關(guān)的多種任務(wù)。同時(shí),該工具為小型項(xiàng)目提供了免費(fèi)版,你可以導(dǎo)航到官方網(wǎng)站進(jìn)行獲取。
Java 合并 Excel 工作表
Excel 文件往往包含多個(gè)工作表,用來(lái)記錄不同階段或部門的數(shù)據(jù)。但在分析匯總時(shí),我們往往需要把這些分散的內(nèi)容整合到一個(gè)工作表中,方便統(tǒng)一查看和處理。接下來(lái),我們就來(lái)看看如何使用 Java 代碼高效地將多個(gè)工作表合并為一個(gè),實(shí)現(xiàn)數(shù)據(jù)的快速整合。
步驟
- 創(chuàng)建主工作簿:使用
Workbook對(duì)象并刪除默認(rèn)工作表,通過(guò)getWorksheets().add()新建一個(gè)用于保存合并結(jié)果的工作表。 - 加載源文件:分別創(chuàng)建臨時(shí)
Workbook對(duì)象,使用loadFromFile()方法加載要合并的 Excel 文件。 - 獲取并復(fù)制數(shù)據(jù):通過(guò)
getWorksheets().get(0)獲取每個(gè)文件中的目標(biāo)工作表,使用getAllocatedRange().copy()將其內(nèi)容復(fù)制到主工作簿的新工作表中。 - 調(diào)整粘貼位置:利用
getLastRow()方法確定下一次粘貼的起始行,確保多個(gè)文件數(shù)據(jù)依次排列而不被覆蓋。 - 保存結(jié)果文件:調(diào)用
saveToFile()方法,將合并完成的工作簿輸出到指定的output文件夾中。
代碼示例:將分屬兩個(gè) Excel 文件中的第一個(gè)工作表合并到一起
import com.spire.xls.*;
public class MergeWorksheets {
public static void main(String[] args) {
// 輸入文件路徑
String[] inputFiles = new String[]{
"E:/Administrator/Python1/input/北美人口數(shù)量前十.xlsx",
"E:/Administrator/Python1/input/南美人口數(shù)量前十.xlsx"
};
// 輸出文件路徑
String outputFile = "E:/Administrator/Python1/output/合并結(jié)果.xlsx";
// 創(chuàng)建一個(gè)新的工作簿
Workbook mergedWorkbook = new Workbook();
mergedWorkbook.getWorksheets().clear(); // 刪除默認(rèn)空白表
// 在新工作簿中添加一個(gè)合并用的工作表
Worksheet mergedSheet = mergedWorkbook.getWorksheets().add("合并結(jié)果");
// 創(chuàng)建一個(gè)臨時(shí)工作簿
Workbook tempWorkbook = new Workbook();
int currentRow = 1; // 記錄目標(biāo)表中當(dāng)前可寫入的行號(hào)
// 遍歷輸入文件
for (String file : inputFiles) {
// 加載當(dāng)前 Excel 文件
tempWorkbook.loadFromFile(file);
// 獲取第一個(gè)工作表
Worksheet sourceSheet = tempWorkbook.getWorksheets().get(0);
// 獲取源表已用區(qū)域
CellRange sourceRange = sourceSheet.getAllocatedRange();
// 獲取目標(biāo)區(qū)域起點(diǎn)(currentRow 行,第 1 列)
CellRange destRange = mergedSheet.getCellRange(currentRow, 1, currentRow, 1);
// 將源表復(fù)制到目標(biāo)區(qū)域
sourceRange.copy(destRange);
// 更新下一次寫入起點(diǎn)行號(hào)
currentRow += sourceRange.getRowCount();
}
// 保存結(jié)果
mergedWorkbook.saveToFile(outputFile, ExcelVersion.Version2016);
// 釋放資源
mergedWorkbook.dispose();
tempWorkbook.dispose();
}
}
輸出文件預(yù)覽

Java 合并多個(gè) Excel 文件
除了合并不同 Excel 文件中的工作表以外,Spire.XLS for Java 還支持合并一整個(gè) Excel 工作簿。通過(guò)加載多個(gè) Excel 文件并依次遍歷它們的工作表,就能將所有內(nèi)容復(fù)制到一個(gè)新的工作簿中,實(shí)現(xiàn)自動(dòng)化匯總。核心思路是使用 getWorksheets() 方法獲取每個(gè)文件中的工作表集合,并借助 addCopy() 方法將它們復(fù)制到新建的工作簿中。這樣,無(wú)論文件數(shù)量多少,都能輕松完成合并操作。下面我們來(lái)看看具體的步驟解析和代碼示例。
步驟
- 設(shè)置文件路徑:創(chuàng)建字符串?dāng)?shù)組
inputFiles,存放需要合并的多個(gè) Excel 文件路徑。 - 創(chuàng)建新工作簿:實(shí)例化一個(gè)
Workbook對(duì)象,并通過(guò)getWorksheets().clear()刪除默認(rèn)工作表,為合并內(nèi)容預(yù)留空間。 - 創(chuàng)建臨時(shí)工作簿:實(shí)例化另一個(gè)
Workbook對(duì)象,用于逐個(gè)加載要合并的文件。 - 遍歷并復(fù)制工作表:使用
loadFromFile()加載每個(gè) Excel 文件,通過(guò)getWorksheets()獲取其中的所有工作表,并調(diào)用addCopy()方法將它們復(fù)制到新建工作簿中。 - 保存結(jié)果文件:使用
saveToFile()方法將合并后的內(nèi)容輸出到指定路徑,生成新的 Excel 文件。
代碼示例:合并兩個(gè)不同的 Excel 文件
import com.spire.xls.*;
public class mergeWorkbooks {
public static void main(String[] args){
//錄入需要合并的Excel文件的路徑
String[] inputFiles = new String[]{"E:/Administrator/Python1/input/北美人口數(shù)量前十.xlsx","E:/Administrator/Python1/input/南美人口數(shù)量前十.xlsx", "E:/Administrator/Python1/input/歐洲人口數(shù)量前十.xlsx"};
//創(chuàng)建Workbook類的對(duì)象
Workbook newBook = new Workbook();
//刪除新建工作簿中的所有工作表
newBook.getWorksheets().clear();
//創(chuàng)建另一個(gè)Workbook類的對(duì)象
Workbook tempBook = new Workbook();
//循環(huán)遍歷Excel工作簿中的工作表,并將所有工作表復(fù)制到新建的工作簿中
for (String file : inputFiles)
{
tempBook.loadFromFile(file);
for (Object sheet : (Iterable)tempBook.getWorksheets())
{
newBook.getWorksheets().addCopy((Worksheet) sheet, WorksheetCopyType.CopyAll);
}
}
//保存新建的工作簿
newBook.saveToFile("E:/Administrator/Python1/output/合并工作簿.xlsx", ExcelVersion.Version2013);
}
}
輸出文件預(yù)覽

總結(jié)
通過(guò)以上兩種方法,我們可以在 Java 中輕松完成多個(gè) Excel 文件的快速合并,再也不用手動(dòng)去完成復(fù)制粘貼。如果你希望在項(xiàng)目中更加高效地處理 Excel 文檔、自動(dòng)化批量操作,不妨試試 Spire.XSL for Java —— 它提供了易懂且功能完善的 API,幫助你毫不費(fèi)力地應(yīng)對(duì)各種簡(jiǎn)單或復(fù)雜的 Excel 處理場(chǎng)景。
到此這篇關(guān)于Java實(shí)現(xiàn)快速合并Excel工作表和文件的文章就介紹到這了,更多相關(guān)Java合并Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud gateway如何修改返回?cái)?shù)據(jù)
這篇文章主要介紹了SpringCloud gateway如何修改返回?cái)?shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
詳解Spring中Bean的生命周期和作用域及實(shí)現(xiàn)方式
這篇文章主要給大家介紹了Spring中Bean的生命周期和作用域及實(shí)現(xiàn)方式的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03
Java的SpringMVC中控制器返回XML數(shù)據(jù)問(wèn)題
這篇文章主要介紹了Java的SpringMVC中控制器返回XML數(shù)據(jù)問(wèn)題,控制器是處理HTTP請(qǐng)求的組件,它們接收來(lái)自客戶端的請(qǐng)求,并將其轉(zhuǎn)換為適當(dāng)?shù)捻憫?yīng),這些響應(yīng)可以是動(dòng)態(tài)生成的?HTML?頁(yè)面,也可以是JSON或XML格式的數(shù)據(jù),需要的朋友可以參考下2023-07-07
Java報(bào)錯(cuò):找不到或無(wú)法加載主類的解決辦法
在Java中當(dāng)您嘗試運(yùn)行一個(gè)類作為主類時(shí),如果系統(tǒng)找不到該類或者無(wú)法加載該類,就會(huì)出現(xiàn)"找不到或無(wú)法加載主類"的錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):找不到或無(wú)法加載主類的解決辦法,需要的朋友可以參考下2024-12-12
SpringMVC中Json數(shù)據(jù)交互處理示例詳解
這篇文章主要介紹了SpringMVC中Json數(shù)據(jù)交互處理的相關(guān)資料,分別講解了JSON的基本概念、構(gòu)成要素、數(shù)據(jù)類型、對(duì)象和數(shù)組的表示方法、字符串的轉(zhuǎn)義規(guī)則以及JSON與JavaScript的關(guān)系,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
Java讀寫文件,在文件中搜索內(nèi)容,并輸出含有該內(nèi)容的所有行方式
這篇文章主要介紹了Java讀寫文件,在文件中搜索內(nèi)容,并輸出含有該內(nèi)容的所有行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
SpringBoot中最常用的5個(gè)內(nèi)置對(duì)象使用方法
這篇文章主要給大家介紹了關(guān)于SpringBoot中最常用的5個(gè)內(nèi)置對(duì)象使用的相關(guān)資料,在學(xué)習(xí)springboot的過(guò)程中,發(fā)現(xiàn)了springboot非常多的優(yōu)點(diǎn)和特性,需要的朋友可以參考下2023-08-08

