Java로 Excel 파일 손쉽게 읽고 파싱하기 – .XLS와 .XLSX

Pilalo Jovanitho·2026년 9월 1일

Excel 파일은 보고서, 사용자 제출 양식, 시스템 내보내기 데이터 등 구조화된 데이터를 저장하고 교환하는 데 널리 사용됩니다. 많은 Java 애플리케이션에서 이러한 Excel 파일을 열고 데이터를 추출하여 추가 처리하는 것이 필수적인 기능입니다. 이 글에서는 Java용 Spire.XLS for Java 라이브러리를 사용하여 .xls와 .xlsx 파일을 읽고, 데이터 타입에 맞게 파싱하는 단계별 방법을 예제와 함께 소개합니다.

1. 환경 준비 및 라이브러리 설치

Excel 파일을 파싱하려면 먼저 프로젝트에 적절한 라이브러리를 추가해야 합니다. 이 라이브러리는 두 Excel 형식을 모두 지원하며, Microsoft Excel이 설치되지 않은 환경에서도 동작합니다.

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.8,4</version>
    </dependency>
</dependencies>

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

2. 기본적인 Excel 파일 로드 및 워크시트 정보 확인

가장 먼저 Excel 파일을 로드하고, 첫 번째 워크시트의 이름을 확인하는 기본적인 예제입니다.

import com.spire.xls.*;

public class ParseExcel {
    public static void main(String[] args) {
        // Workbook 객체 생성 및 Excel 파일 로드
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.xlsx"); // 또는 "data.xls"

        // 첫 번째 워크시트 가져오기
        Worksheet sheet = workbook.getWorksheets().get(0);
        System.out.println("Worksheet loaded: " + sheet.getName());
    }
}

3. 모든 셀을 문자열로 읽기

가장 간단한 방법은 Excel 데이터를 텍스트로 읽어오는 것입니다. 이는 데이터 타입에 크게 신경 쓰지 않고, 로깅이나 화면 표시, 빠른 데이터 확인이 필요할 때 적합합니다.

import com.spire.xls.*;

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

        Worksheet sheet = workbook.getWorksheets().get(0);

        // 모든 행과 열을 순회하며 데이터를 문자열로 읽기
        for (int i = 1; i <= sheet.getLastRow(); i++) {
            for (int j = 1; j <= sheet.getLastColumn(); j++) {
                String cellText = sheet.getCellRange(i, j).getValue();
                System.out.print(cellText + "\t");
            }
            System.out.println();
        }
    }
}

4. 숫자 값 파싱 (int / double / float)

데이터 처리, 검증, 계산을 위해서는 숫자 셀의 값을 적절한 Java 숫자 타입으로 읽어야 합니다. getNumberValue()를 사용하여 숫자 값을 가져올 수 있습니다.

import com.spire.xls.*;

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

        Worksheet sheet = workbook.getWorksheets().get(0);
        CellRange usedRange = sheet.getAllocatedRange(); // 데이터가 있는 범위 가져오기

        System.out.println("Raw number values:");
        // 사용된 범위의 행과 열을 순회
        for (int i = usedRange.getRow(); i <= usedRange.getLastRow(); i++) {
            for (int j = usedRange.getColumn(); j <= usedRange.getLastColumn(); j++) {
                CellRange cell = sheet.getRange().get(i, j);
                // 숫자 값이 존재하는 경우에만 출력 (빈 셀 등 제외)
                if (!(Double.isNaN(cell.getNumberValue()))) {
                    System.out.print(cell.getNumberValue() + "\t");
                }
            }
            System.out.println();
        }
    }
}

5. 날짜 및 시간 값 파싱

Excel의 날짜도 내부적으로는 숫자로 저장됩니다. getDateTimeValue()를 사용하면 java.util.Date 객체로 직접 가져올 수 있어 날짜 연산이 편리합니다.

import com.spire.xls.*;
import java.util.Date;

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

        Worksheet sheet = workbook.getWorksheets().get(0);
        CellRange usedRange = sheet.getAllocatedRange();

        System.out.println("Date values:");
        // 예시: G열(G1, G2, G3...)의 날짜 값 읽기
        for (int i = 0; i < usedRange.getRowCount(); i++) {
            CellRange cell = usedRange.get(String.format("G%d", i + 1));
            Date date = cell.getDateTimeValue();
            System.out.println(date);
        }
    }
}

6. 추가 고려 사항 및 대안

  • 라이선스: 이 라이브러리는 상용 제품입니다. 무료 버전(Free Spire.XLS for Java)도 제공되지만, 워크시트 수나 행 수 등에 제약이 있을 수 있으므로 프로젝트에 맞는 버전을 선택해야 합니다.
  • 오픈소스 대안 (Apache POI): 오픈소스 라이선스가 필요하다면 Apache POI를 고려할 수 있습니다. POI는 .xls(HSSF)와 .xlsx(XSSF)를 모두 지원하며, WorkbookFactory를 사용하면 파일 형식을 자동으로 감지할 수 있습니다. 다만, 이 글에서 소개한 방식에 비해 상대적으로 더 많은 코드를 작성해야 할 수 있습니다.
  • InputStream에서 읽기: 웹 애플리케이션 등에서 파일 업로드로 전달된 Excel 파일은 InputStream 형태로 받을 수 있습니다. 이 라이브러리는 workbook.loadFromStream(inputStream) 메서드를 통해 이를 지원합니다.
  • 데이터 타입 확인: 특정 셀의 데이터 타입을 확인하려면 cell.getType() 메서드를 사용할 수 있습니다. 이는 숫자, 문자열, 수식, 빈 셀 등을 구분하는 데 유용합니다.

결론

이 글에서는 Spire.XLS for Java를 사용하여 Excel 파일을 로드하고, 모든 셀을 문자열로 읽거나, 숫자와 날짜 값을 타입에 맞게 파싱하는 방법을 코드 예제와 함께 살펴보았습니다. 이 라이브러리는 .xls와 .xlsx 형식을 모두 지원하며, Workbook과 Worksheet 객체를 통해 직관적인 API를 제공하여 Excel 데이터에 접근할 수 있게 해줍니다. 프로젝트의 요구사항과 라이선스 정책에 따라 이 방식이 적합한지 판단하고, 필요에 따라 Apache POI와 같은 오픈소스 대안과 비교하여 선택할 것을 권장합니다.

0개의 댓글