대용량 Excel 워크북을 개별 시트로 분할하는 것은 워크시트별로 데이터를 처리하거나 배포하려는 경우 흔히 필요한 작업입니다. Java에서 Excel 워크북 분할 기능을 사용하면 개발자가 각 시트를 별도로 처리하거나 보고할 수 있도록 격리할 수 있습니다. Conholdate.Total for Java는 이 작업을 Java 애플리케이션에서 간단하게 수행할 수 있도록 강력한 SDK를 제공합니다. 이 가이드에서는 전체 코드 예제를 확인하고, 라이브러리 설정 방법을 배우며, 성능 고려 사항을 이해하고, 큰 XLSX 파일을 효율적으로 처리하기 위한 실용적인 팁을 얻을 수 있습니다.

Java에서 Excel 워크북 분할 전체 작업 예제

이 예제는 Conholdate.Total을 사용하여 Excel 워크북을 별도의 파일로 분할하는 방법을 보여줍니다.

import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.cells.SaveFormat;
import java.io.File;

public class ExcelSplitter {
    public static void main(String[] args) {
        String sourceFile = "input.xlsx";
        String outputDir = "splitted";

File dir = new File(outputDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }

try {
            Workbook sourceWorkbook = new Workbook(sourceFile);
            int sheetCount = sourceWorkbook.getWorksheets().getCount();

for (int i = 0; i < sheetCount; i++) {
                Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
                Workbook splitWorkbook = new Workbook();

splitWorkbook.getWorksheets().addCopy(sheet);
                if (splitWorkbook.getWorksheets().getCount() > 1) {
                    splitWorkbook.getWorksheets().removeAt(0);
                }

String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
                String outPath = outputDir + File.separator + safeName + ".xlsx";

splitWorkbook.save(outPath, SaveFormat.XLSX);
                splitWorkbook.dispose();
            }

sourceWorkbook.dispose();
        } catch (Exception e) {
            System.err.println("Error during splitting: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Note: 이 코드 예제는 핵심 기능을 보여줍니다. 프로젝트에서 사용하기 전에 파일 경로와 구성 값을 실제 환경에 맞게 업데이트하고, 모든 필수 종속성이 올바르게 설치되었는지 확인하며, 개발 환경에서 충분히 테스트하십시오. 문제가 발생하면 공식 문서를 참조하거나 지원 팀에 문의하십시오.

사용된 주요 클래스

이 스니펫은 Conholdate.Total에 포함된 Aspose.Cells 라이브러리의 세 가지 핵심 클래스를 사용합니다:

  • Workbook - 전체 Excel 파일을 나타내며 로드, 저장 및 워크북을 조작하는 메서드를 제공합니다. Workbook 클래스 API 참조를 참조하세요.
  • Worksheet - 워크북 내 개별 시트에 접근할 수 있습니다.
  • SaveFormat - 출력 형식을 정의하는 열거형이며; SaveFormat.XLSX는 최신 XLSX 컨테이너에 파일을 씁니다.

이 클래스들은 가볍지만 네이티브 리소스를 할당하므로, (예시와 같이) 즉시 해제하는 것이 대용량 Excel 파일에 대한 메모리 관리에 필수적입니다.

Java에서 Excel 워크북 분할 분석

프로그램은 명확한 순서를 따르며, 이를 모든 Excel Split Java 워크플로에 적용할 수 있습니다.

단계별 설명

  1. 소스 워크북 로드 - new Workbook(sourceFile)는 입력 XLSX를 읽습니다.
Workbook sourceWorkbook = new Workbook(sourceFile);
  1. 출력 디렉터리 생성 - 대상 폴더가 존재하는지 확인하고, 필요하면 생성합니다.
File dir = new File(outputDir);
if (!dir.exists()) {
    dir.mkdirs();
}
  1. 워크시트 반복 - sourceWorkbook.getWorksheets().getCount()는 시트 수를 반환하고, 루프는 각 시트를 처리합니다.
for (int i = 0; i < sheetCount; i++) {
    Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
}
  1. 현재 시트를 새 워크북에 복사 - addCopy(sheet)는 시트를 복제하고, 기본 빈 시트가 있으면 제거합니다.
Workbook splitWorkbook = new Workbook();
splitWorkbook.getWorksheets().addCopy(sheet);
if (splitWorkbook.getWorksheets().getCount() > 1) {
    splitWorkbook.getWorksheets().removeAt(0);
}
  1. 분할 워크북 저장 - 안전한 파일 이름을 생성하고 시트를 XLSX 파일로 씁니다.
String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
String outPath = outputDir + File.separator + safeName + ".xlsx";
splitWorkbook.save(outPath, SaveFormat.XLSX);
  1. 리소스 해제 - 임시 및 원본 워크북 모두에서 dispose()를 호출하여 메모리를 해제하고 네이티브 누수를 방지합니다.

전체 흐름은 더 큰 데이터‑처리 파이프라인에 삽입될 수 있는 실용적인 Java 코드 예제: Excel 시트 분할입니다.

필수 조건 및 설정 - Conholdate.Total 시작하기

예제를 컴파일하고 실행하려면, 개발 환경이 다음 전제 조건을 충족하는지 확인하십시오.

Maven 구성

Conholdate Maven 저장소와 SDK 종속성을 pom.xml에 추가하십시오:

<repositories>
    <repository>
        <id>conholdate-repo</id>
        <name>Conholdate Maven Repository</name>
        <url>https://repository.conholdate.com/repo/</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.conholdate</groupId>
    <artifactId>conholdate-total</artifactId>
    <version>24.9</version>
    <type>pom</type>
</dependency>

공식 다운로드 페이지에서 최신 SDK 패키지를 다운로드하십시오: Conholdate.Total for Java download. 이 라이브러리는 Java 8 이상이 필요하며 표준 JVM에서 실행됩니다.

라이선스 구성

프로덕션 사용을 위해서는 유효한 라이선스가 필요합니다. 테스트용 임시 라이선스는 임시 라이선스 페이지에서 얻을 수 있습니다. 장기 프로젝트의 경우, 가격 페이지에서 가격 옵션을 검토하십시오. 라이선스 파일을 확보한 후, 문서에 설명된 대로 애플리케이션 시작 코드(여기서는 표시되지 않음)에 설정하십시오.

효율적인 Excel 분할을 위한 실용적인 팁

대용량 워크북을 다룰 때는 신중한 리소스 관리가 필요합니다. 다음 권장 사항은 프로세스를 빠르고 안정적으로 유지하는 데 도움이 됩니다.

메모리 관리 권장 사항

  • 각 임시 워크북을 저장 후 폐기하여 네이티브 리소스를 해제하고 메모리 사용량을 낮게 유지합니다.
  • 가능한 경우 객체 재사용 - 소스에 대해 단일 Workbook 인스턴스를 만들고 출력 디렉터리에 동일한 File 객체를 재사용하면 가비지 컬렉터 압력이 감소합니다.
  • 스트리밍 모드 고려 - Conholdate.Total 버전이 지원한다면, 스트리밍은 전체 워크북을 메모리에 로드하는 대신 필요에 따라 행을 읽습니다.

일반적인 함정 및 이를 피하는 방법

증상가능한 원인해결 방법
java.lang.OutOfMemoryError각 분할 워크북을 메모리에 모두 유지함예시와 같이 루프 내부에서 splitWorkbook.dispose()가 호출되도록 보장하십시오.
Illegal file name error시트 이름에 `\ / : * ? " < >`와 같은 문자가 포함되어 있음
Missing output files출력 디렉터리 경로가 잘못되었거나 쓰기 권한이 없음outputDir이 쓰기 권한이 있는 위치를 가리키는지 확인하십시오.

성능 향상 도구

  • Log progress - 저장하기 전에 시트 이름을 출력하면 대량 배치에서 실패 지점을 식별하는 데 도움이 됩니다.
  • Increase JVM heap - 매우 큰 워크북의 경우 -Xmx2g(또는 그 이상) 옵션으로 JVM을 시작하여 프로세스에 더 많은 메모리를 할당하십시오.
  • Parallel processing - 워크북이 상호 의존적이지 않다면 작업을 여러 스레드로 분할할 수 있지만, 기본 네이티브 라이브러리가 항상 스레드 안전하지 않을 수 있으니 충분히 테스트하십시오.

이 팁을 따르면 수천 개의 시트나 수백 메가바이트 크기의 워크북을 다룰 때도 Java에서 Excel 워크북을 분할할 수 있습니다.

결론

Conholdate.Total for Java를 사용하여 Excel 워크북을 개별 XLSX 파일로 분할하는 것은 워크시트 데이터에 대한 세밀한 접근이 필요한 Java 개발자에게 간단하면서도 강력한 기술입니다. 제공된 코드는 소스 워크북을 로드하고 각 시트가 저장된 후 리소스를 해제하는 전체 워크플로우를 보여줍니다. 이 접근 방식을 사용하여 Java에서 Excel 워크북 분할을 수행하면 각 시트를 세밀하게 제어할 수 있으며 더 큰 데이터 처리 파이프라인에 쉽게 통합됩니다. 프로덕션 사용을 위해 적절한 라이선스를 확보해야 함을 기억하세요; 가격 페이지에서 가격 옵션을 확인하거나 임시 라이선스 페이지에서 임시 라이선스를 요청할 수 있습니다. SDK가 설치되고 모범 사례 권장 사항이 적용되면 가장 까다로운 Excel Split Java 시나리오도 처리할 준비가 됩니다.

자주 묻는 질문

Java에서 Conholdate.Total을 사용하여 Excel 워크북을 어떻게 분할할 수 있나요?
전체 예제에 표시된 ExcelSplitter 클래스를 사용하십시오. 이 클래스는 원본 워크북을 로드하고, 각 워크시트를 순회하며, 시트당 새로운 워크북을 생성하고, 이를 개별 XLSX 파일로 저장합니다. 이 방법은 워크북 크기에 관계없이 Java를 사용하여 XLSX 파일을 분할해야 할 때에도 작동합니다.

SDK가 모든 Java 버전과 호환됩니까?
SDK는 Java 8 및 이후 버전을 지원합니다. 프로젝트가 호환 가능한 JDK를 대상으로 하는지 확인하십시오.

코드를 실행하기 전에 라이선스를 설정해야 하나요?
프로덕션 배포에는 라이선스가 필요합니다. 테스트용 임시 라이선스는 임시 라이선스 페이지에서 얻을 수 있으며, 전체 가격은 가격 페이지에서 확인할 수 있습니다.

내 워크북에 수천 개의 시트가 포함되어 있다면 어떻게 해야 할까요?
워크북을 배치로 처리하고, 각 임시 워크북을 즉시 폐기하며, 필요에 따라 JVM 힙 크기를 늘리는 것을 고려하십시오. 각 시트 이름을 로깅하면 문제 있는 시트를 빠르게 찾아낼 수 있습니다.

더 읽기