最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中合并Excel文件的實用方法詳解

 更新時間:2026年04月26日 07:59:57   作者:用戶372157426135  
在企業(yè)應(yīng)用中,處理 Excel 文件是非常常見的需求,這篇文章主要介紹了Java中合并Excel文件的幾個實用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在企業(yè)應(yīng)用中,處理 Excel 文件是非常常見的需求,無論是財務(wù)報表、銷售統(tǒng)計,還是數(shù)據(jù)分析,合并 Excel 文件都是必不可少的操作。不同的業(yè)務(wù)場景對合并方式的要求也各不相同,以下是幾類常見的 Excel 合并場景:

  • 按文件合并:將多個 Excel 文件的數(shù)據(jù)整合到一個新文件中,每個文件對應(yīng)一個工作表。
  • 合并工作表:將同一工作簿中不同工作表的數(shù)據(jù)匯總到一個工作表中,方便統(tǒng)計和分析。
  • 批量合并:處理大量 Excel 文件,將所有數(shù)據(jù)匯總到統(tǒng)一格式的表格中。
  • 統(tǒng)一表頭:多個文件的表頭可能不一致,合并時需要先統(tǒng)一表頭再整合數(shù)據(jù)。

接下來,我們將結(jié)合這些場景,介紹幾種在 Java 中實現(xiàn) Excel 文件合并的方法。

環(huán)境準備與依賴安裝

在開始操作之前,需要準備以下環(huán)境:

  • Java 8 或以上版本
  • Spire.XLS for Java(支持 Excel 2003、2007及以上版本)
  • IDE(如 IntelliJ IDEA 或 Eclipse)

在項目中引入 Spire.XLS 依賴:

<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>16.3.2</version>
    </dependency>
</dependencies>

注意:版本號根據(jù)你實際下載的 Spire.XLS for Java 版本替換即可。

示例一:合并多個 Excel 文件

如果需要將多個 Excel 文件合并到一個新文件,可以通過逐個文件、逐個工作表復(fù)制的方式實現(xiàn)。使用 ??Workbook.getWorksheets().addCopy()?? 方法可以完整保留工作表的內(nèi)容,包括數(shù)據(jù)、格式、公式、圖表和條件格式。在處理較大文件時,建議每次加載一個文件,以避免內(nèi)存占用過高。

import com.spire.xls.*;

public class MergeExcels {
    public static void main(String[] args){
        String[] inputFiles = new String[]{"Budget Summary.xlsx", "Income.xlsx", "Expenses.xlsx"};

        Workbook newBook = new Workbook();
        newBook.getWorksheets().clear();
        Workbook tempBook = new Workbook();

        for (String file : inputFiles) {
            tempBook.loadFromFile(file);
            for (Worksheet sheet : (Iterable) tempBook.getWorksheets()) {
                newBook.getWorksheets().addCopy(sheet, WorksheetCopyType.CopyAll);
            }
        }

        newBook.saveToFile("MergeFiles.xlsx", ExcelVersion.Version2013);
        System.out.println("合并完成!");
    }
}

示例二:將多個工作表的數(shù)據(jù)合并到同一個工作表

當需要將多個工作表的數(shù)據(jù)匯總到同一個總表時,可以選定一個主工作表,將其他工作表的數(shù)據(jù)追加到其末尾。使用 ??CellRange.copy()?? 方法可以精確復(fù)制數(shù)據(jù)區(qū)域,同時保持原有的單元格格式和樣式。處理時要注意跳過表頭,避免重復(fù)添加。

import com.spire.xls.*;

public class MergeExcelWorksheets {
    public static void main(String[] args){
        Workbook workbook = new Workbook();
        workbook.loadFromFile("input.xlsx");

        Worksheet sheet1 = workbook.getWorksheets().get(0);
        Worksheet sheet2 = workbook.getWorksheets().get(1);

        CellRange sourceRange = sheet2.getAllocatedRange();
        CellRange destRange = sheet1.getCellRange(sheet1.getLastRow() + 1, 1);

        sourceRange.copy(destRange);
        sheet2.remove();

        workbook.saveToFile("MergeWorksheets.xlsx", ExcelVersion.Version2013);
        System.out.println("工作表數(shù)據(jù)合并完成!");
    }
}

示例三:批量合并目錄下的 Excel 文件

如果要處理整個目錄中的所有 Excel 文件,可以遍歷文件夾,按文件和工作表順序復(fù)制到新的工作簿。??addCopy()?? 方法同樣適用,這樣可以一次性處理大量報表,提高效率。處理大量文件時,最好按文件分批加載,以減少內(nèi)存壓力。

import com.spire.xls.*;
import java.io.File;

public class MergeExcelDirectory {
    public static void main(String[] args){
        File folder = new File("excel_folder");
        File[] files = folder.listFiles((dir, name) -> name.endsWith(".xlsx"));

        Workbook newBook = new Workbook();
        newBook.getWorksheets().clear();
        Workbook tempBook = new Workbook();

        for (File file : files) {
            tempBook.loadFromFile(file.getAbsolutePath());
            for (Worksheet sheet : (Iterable) tempBook.getWorksheets()) {
                newBook.getWorksheets().addCopy(sheet, WorksheetCopyType.CopyAll);
            }
        }

        newBook.saveToFile("MergedDirectory.xlsx", ExcelVersion.Version2013);
        System.out.println("批量合并完成!");
    }
}

示例四:合并 Excel 文件并統(tǒng)一表頭

當源文件表頭不一致或缺失時,可以先在目標工作表中設(shè)置統(tǒng)一表頭,然后將各文件的數(shù)據(jù)依次復(fù)制到對應(yīng)位置。??CellRange.copy()?? 可以確保數(shù)據(jù)正確對齊,行號累加避免覆蓋。這樣可以生成結(jié)構(gòu)一致的總表,便于后續(xù)分析或統(tǒng)計。

import com.spire.xls.*;

public class MergeWithHeader {
    public static void main(String[] args){
        String[] files = {"Jan.xlsx", "Feb.xlsx", "Mar.xlsx"};
        Workbook workbook = new Workbook();
        workbook.getWorksheets().clear();
        Worksheet masterSheet = workbook.getWorksheets().add("Summary");

        masterSheet.getCellRange("A1").setText("日期");
        masterSheet.getCellRange("B1").setText("銷售額");
        masterSheet.getCellRange("C1").setText("成本");

        int currentRow = 2;
        Workbook temp = new Workbook();

        for (String file : files) {
            temp.loadFromFile(file);
            Worksheet sheet = temp.getWorksheets().get(0);
            CellRange dataRange = sheet.getAllocatedRange();
            CellRange dest = masterSheet.getCellRange(currentRow, 1);
            dataRange.copy(dest);
            currentRow += dataRange.getRowCount();
        }

        workbook.saveToFile("MergedWithHeader.xlsx", ExcelVersion.Version2013);
        System.out.println("數(shù)據(jù)合并并統(tǒng)一表頭完成!");
    }
}

合并 Excel 文件的注意事項

  • 列結(jié)構(gòu)一致性:按行合并時注意各工作表的列順序和數(shù)量,避免數(shù)據(jù)錯位。
  • 數(shù)據(jù)類型保持一致:數(shù)字、日期、文本類型最好統(tǒng)一。
  • 內(nèi)存優(yōu)化:批量處理大量文件時,可分批加載,避免內(nèi)存占用過高。
  • 格式保留:需要保留公式、樣式和圖表時,使用 WorksheetCopyType.CopyAll
  • 表頭統(tǒng)一:合并數(shù)據(jù)前最好統(tǒng)一表頭,特別是源文件列名不一致時。

方法補充

在 Java 中合并 Excel 文件,有多種成熟的庫可供選擇。主要分為兩大類:開源免費的 Apache POI 和 EasyExcel,以及功能強大的 Aspose.Cells 等商業(yè)庫。

方案對比

方面開源方案 (推薦)商業(yè)方案 (按需選擇)
代表庫Apache POI, EasyExcelAspose.Cells, Spire.XLS
優(yōu)點免費、社區(qū)活躍、靈活性強功能強大、文檔詳盡、合并更穩(wěn)定、保留樣式好
缺點代碼相對繁瑣,處理復(fù)雜格式或大文件時需注意內(nèi)存溢出問題需要付費
適用場景大多數(shù)通用需求,優(yōu)先推薦的開源免費方案對合并的格式、樣式有極高要求,或需處理超大數(shù)據(jù)量的企業(yè)級應(yīng)用

主流的實現(xiàn)方案

1. 使用 Apache POI (功能豐富,靈活可控)

這是最經(jīng)典的Java處理Excel方案,雖然代碼量稍多,但提供了最大的靈活性。

步驟: 引入依賴 -> 遍歷文件 -> 創(chuàng)建工作表和 Sheet -> 復(fù)制數(shù)據(jù), 樣式及合并單元格信息 -> 保存

注意:手動復(fù)制樣式需要額外代碼,大文件下 注意內(nèi)存占用問題。

Maven 依賴

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.4</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.4</version>
</dependency>

2. 使用 EasyExcel (API 簡潔,內(nèi)存友好)

這是阿里開源的工具,API設(shè)計簡潔,內(nèi)存占用更低。

Maven 依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.4</version>
</dependency>
// 注意:該示例簡單合并了所有文件的內(nèi)容,表頭會重復(fù)出現(xiàn)。
// 在實際使用中還需完善,例如跳過后續(xù)文件的表頭等。
public static void mergeExcelFiles(List<File> inputFiles, File outputFile) {
    ExcelWriter excelWriter = EasyExcel.write(outputFile).build();
    for (File inputFile : inputFiles) {
        List<List<Object>> data = EasyExcel.read(inputFile)
                .sheet()
                .doReadSync();
        excelWriter.write(data, EasyExcel.writerSheet().build());
    }
    excelWriter.finish();
}

3. 使用 Aspose.Cells (工業(yè)級方案)

使用方式

  • 直接合并:通過 Workbook 的 combine 方法快速合并。
  • 精確復(fù)制:通過 Worksheet.copy 方法精確控制工作表復(fù)制。
  • 緩存合并:對于大量文件,可使用 CellsHelper.mergeFiles 方法提升效率。

Maven 依賴

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>25.3</version>
</dependency>

4. 使用 GroupDocs.Merger

此方案適合需要簡單快捷地將Excel文檔合并為一個,而不關(guān)心內(nèi)部工作表結(jié)構(gòu)的場景。

Maven 依賴

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-merger</artifactId>
    <version>23.7</version>
</dependency>

總結(jié)

本文介紹了 Java 中四種常用的 Excel 合并方法:

  1. 按文件合并:完整保留每個工作表,適合整合報表或項目數(shù)據(jù)。
  2. 合并工作表數(shù)據(jù)到單表:將多個工作表數(shù)據(jù)匯總到一個總表,便于統(tǒng)計分析。
  3. 批量合并目錄下文件:一次性處理整個目錄中的 Excel 文件,提高效率。
  4. 統(tǒng)一表頭合并:在源文件表頭不一致的情況下,生成結(jié)構(gòu)統(tǒng)一的總表。

通過合理選擇方法,可以顯著提高處理 Excel 數(shù)據(jù)的效率和準確性。

到此這篇關(guān)于Java中合并Excel文件的實用方法詳解的文章就介紹到這了,更多相關(guān)Java合并Excel文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決feign之間文件上傳報錯:Error converting request body的問題

    解決feign之間文件上傳報錯:Error converting request body

    這篇文章主要介紹了解決feign之間文件上傳報錯:Error converting request body的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Java dom4j創(chuàng)建解析xml文檔過程解析

    Java dom4j創(chuàng)建解析xml文檔過程解析

    這篇文章主要介紹了Java dom4j創(chuàng)建解析xml文檔過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹(最新推薦)

    Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹(最新推薦)

    RequestMappingHandlerMapping接口是Spring MVC中的一個核心組件,負責(zé)處理請求映射和處理器的匹配這篇文章主要介紹了Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹,需要的朋友可以參考下
    2024-07-07
  • Java實現(xiàn)合并兩個有序序列算法示例

    Java實現(xiàn)合并兩個有序序列算法示例

    這篇文章主要介紹了Java實現(xiàn)合并兩個有序序列算法,簡單描述了序列合并算法的原理與java合并有序序列的具體操作步驟及相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • 舉例講解Java的內(nèi)部類與類的加載器

    舉例講解Java的內(nèi)部類與類的加載器

    這篇文章主要介紹了Java的內(nèi)部類與類的加載器,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-03-03
  • java中List對象列表實現(xiàn)去重或取出及排序的方法

    java中List對象列表實現(xiàn)去重或取出及排序的方法

    這篇文章主要介紹了關(guān)于java中List對象列表實現(xiàn)去重或取出以及排序的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 利用JavaMail發(fā)送HTML模板郵件

    利用JavaMail發(fā)送HTML模板郵件

    這篇文章主要為大家詳細介紹了利用JavaMail發(fā)送HTML模板郵件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 一次學(xué)會JWT之Java登錄、驗證與權(quán)限控制完整流程

    一次學(xué)會JWT之Java登錄、驗證與權(quán)限控制完整流程

    JWT(JSON Web Token)是一種開放標準(RFC 7519),用于在網(wǎng)絡(luò)應(yīng)用環(huán)境間以緊湊的方式安全地傳遞信息,這篇文章主要介紹了JWT Java登錄、驗證與權(quán)限控制的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-09-09
  • springBoot集成flowable的流程解析

    springBoot集成flowable的流程解析

    這篇文章主要介紹了springBoot集成flowable的流程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案

    Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案

    這篇文章主要介紹了Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

宝兴县| 信丰县| 睢宁县| 靖安县| 阳春市| 白水县| 金昌市| 油尖旺区| 咸宁市| 芜湖市| 岑巩县| 封丘县| 明光市| 汉寿县| 蒙自县| 九寨沟县| 文化| 西华县| 大兴区| 南召县| 高青县| 普洱| 日土县| 彰化县| 梧州市| 望奎县| 宁化县| 比如县| 内丘县| 定南县| 旬邑县| 铁力市| 拉孜县| 青阳县| 东兰县| 栾城县| 逊克县| 特克斯县| 蓬莱市| 宾阳县| 洪洞县|