Java로 여러 Excel 파일을 하나로 병합하는 방법

Pilalo Jovanitho·2026년 8월 25일

업무를 진행하다 보면 여러 개의 Excel 파일에 흩어져 있는 데이터를 하나로 모아야 하는 상황이 자주 발생합니다. 분기별 보고서, 부서별 데이터, 혹은 여러 소스에서 수집된 정보를 통합하는 것은 데이터 분석이나 보고서 작성의 첫걸음이지만, 수동으로 파일을 열고 복사하여 붙여넣는 작업은 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 이 글에서는 Java용 Spire.XLS for Java 라이브러리를 사용하여 여러 Excel 파일을 하나로 병합하는 효율적인 방법을 소개합니다.

1. 라이브러리 설치

프로젝트에서 사용할 라이브러리를 의존성에 추가합니다. Maven을 사용하는 경우 pom.xml 파일에 아래 리포지토리와 의존성을 포함시킵니다.

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>16.7.3</version>
    </dependency>
</dependencies>

Maven을 사용하지 않는다면, JAR 파일을 직접 내려받아 프로젝트의 클래스패스에 추가할 수도 있습니다 .

2. 여러 Excel 파일을 하나의 워크북으로 병합하기 (파일별 시트 분리)

가장 기본적인 병합 방식은 여러 Excel 파일을 읽어, 각 파일의 내용을 새로운 워크북의 각기 다른 시트로 복사하는 것입니다. 이 방식은 각 파일의 구조를 유지하면서 하나의 파일로 통합할 때 유용합니다 .

주요 단계:
1. 새로운 Workbook 객체를 생성하고, 기본 시트를 제거합니다.
2. 임시 Workbook 객체를 생성합니다.
3. 병합할 파일 목록을 순회하며 다음을 반복합니다.
a. 임시 Workbook에 현재 파일을 로드합니다.
b. 로드된 워크북의 모든 시트를 순회합니다.
c. addCopy() 메서드를 사용하여 각 시트를 새 워크북으로 복사합니다 .
4. 새 워크북을 파일로 저장합니다.

예제 코드:

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("파일 병합이 완료되었습니다.");
    }
}

addCopy(sheet, WorksheetCopyType.CopyAll) 메서드는 데이터뿐만 아니라 서식, 수식, 차트 등 시트의 모든 내용을 완전히 복사합니다 .

3. 하나의 워크북 내 여러 시트를 하나의 시트로 병합하기

여러 시트로 나뉜 데이터를 다시 하나의 통합 시트로 모아야 하는 경우도 있습니다. 이때는 CellRange.copy() 메서드를 사용하여 특정 범위의 데이터를 다른 시트의 특정 위치로 복사할 수 있습니다 .

주요 단계:
1. 병합할 시트가 포함된 Workbook을 로드합니다.
2. 데이터를 모을 대상 시트를 선택합니다.
3. 복사할 원본 시트의 사용된 범위(getAllocatedRange())를 가져옵니다.
4. 대상 시트에서 데이터를 붙여넣을 시작 셀을 지정합니다.
5. sourceRange.copy(destRange) 메서드로 데이터를 복사합니다.
6. 필요에 따라 원본 시트를 제거하고 파일을 저장합니다 .

예제 코드:

import com.spire.xls.*;

public class MergeWorksheets {
    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);
    }
}

이 예제는 동일한 워크북 내의 시트를 병합하지만, 여러 파일에서 시트를 읽어와 동일한 방식으로 하나의 시트에 통합할 수도 있습니다 .

4. 추가 고려 사항 및 대안

  • 라이선스: Spire.XLS for Java는 상용 제품이며, 무료 버전(Free Spire.XLS for Java)도 제공됩니다. 무료 버전은 .xls 파일 읽기/쓰기 시 워크시트 5개, 행 200개로 제한되며, PDF 등 다른 형식으로의 변환 시에도 제약이 있을 수 있습니다. .xlsx 파일에는 이러한 행 제한이 없습니다. 프로젝트의 요구사항에 맞는 버전을 선택해야 합니다 .
  • Apache POI: 오픈소스 대안으로 Apache POI가 있습니다. POI는 방대한 사용자층과 풍부한 문서를 가지고 있지만, 시트나 셀을 복사할 때 더 많은 수동 코딩이 필요할 수 있습니다 . 예를 들어, WorkbookFactory.create()를 사용하여 파일을 로드하고, 소스 시트의 행과 셀을 순회하며 타겟 시트에 생성하는 방식으로 구현합니다 . POI를 사용하면 라이선스 비용이 들지 않지만, 개발 및 유지보수에 더 많은 노력이 필요할 수 있습니다.
  • 성능: 대용량 파일을 병합할 때는 메모리 사용량에 유의해야 합니다. 파일을 순차적으로 로드하고 처리하는 방식을 사용하면 메모리 부하를 줄일 수 있습니다 .

결론

이 글에서는 Java용 Spire.XLS for Java 라이브러리를 사용하여 여러 Excel 파일을 하나로 병합하는 두 가지 주요 방법을 소개했습니다. 파일별로 시트를 분리하여 병합하거나, 여러 시트의 데이터를 하나의 시트로 통합하는 작업 모두 비교적 간단한 코드로 처리할 수 있습니다. addCopy()와 copy() 메서드는 데이터와 서식을 함께 유지해야 하는 실무 요구사항을 효과적으로 해결해 줍니다. 다만 상용 라이선스 정책과 무료 버전의 제약 사항을 프로젝트 환경에 맞게 검토하고, 필요에 따라 Apache POI와 같은 오픈소스 대안과의 비교를 통해 가장 적합한 도구와 방식을 선택할 것을 권장합니다.

0개의 댓글