Java로 Excel 문서 생성, 읽기, 수정하기

Pilalo Jovanitho·2026년 8월 20일

Excel은 데이터를 표 형태로 정리하고 분석하는 데 널리 사용되는 파일 형식입니다. Java 애플리케이션에서 프로그래밍 방식으로 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 파일을 처음부터 생성하는 과정은 Workbook 클래스를 통해 시작합니다. 워크시트를 추가하고, 원하는 셀에 데이터를 입력한 후 파일로 저장하면 됩니다.

주요 단계:
1. Workbook 객체를 생성합니다.
2. getWorksheets().clear()로 기본 시트를 제거하고, add() 메서드로 새 워크시트를 추가합니다.
3. getRange() 메서드로 원하는 셀 범위를 지정하고, merge()로 병합하거나 setValue()로 값을 씁니다.
4. 정렬, 글꼴 크기, 굵기 등의 서식을 적용합니다.
5. insertArray() 메서드를 사용하여 2차원 배열 데이터를 한 번에 삽입합니다.
6. 행 높이, 열 너비, 테두리 스타일을 설정합니다.
7. saveToFile() 메서드로 파일을 저장합니다.

예제 코드:

import com.spire.xls.*;

public class CreateSpreadsheet {
    public static void main(String[] args) {
        // Workbook 객체 생성
        Workbook wb = new Workbook();

        // 기본 워크시트 제거 및 새 시트 추가
        wb.getWorksheets().clear();
        Worksheet sheet = wb.getWorksheets().add("Employee");

        // A1:G1 셀 병합 및 제목 입력
        sheet.getRange().get("A1:G1").merge();
        sheet.getRange().get("A1").setValue("Basic Information of Employees of Huanyu Automobile Company");
        sheet.getRange().get("A1").setHorizontalAlignment(HorizontalAlignType.Center);
        sheet.getRange().get("A1").setVerticalAlignment(VerticalAlignType.Center);
        sheet.getRange().get("A1").getStyle().getFont().isBold(true);
        sheet.getRange().get("A1").getStyle().getFont().setSize(13);
        sheet.setRowHeight(1, 30);

        // 2차원 배열 데이터를 워크시트에 삽입
        String[][] twoDimensionalArray = new String[][]{
                {"Name", "Gender", "Birth Date", "Educational Background", "Contact Number", "Position", "ID"},
                {"Allen", "Male", "1990-02-10", "Bachelor", "24756854", "Mechanic", "0021"},
                {"Patrick", "Male", "1985-06-08", "Master", "59863247", "Mechanic", "0022"},
                {"Jenna", "Female", "1989-11-25", "Bachelor", "79540352", "Sales", "0023"},
                {"Tommy", "Male", "1988-04-16", "Master", "52014060", "Mechanic", "0024"},
                {"Christina", "Female", "1998-01-21", "Bachelor", "35401489", "HR", "0025"}
        };
        sheet.insertArray(twoDimensionalArray, 2, 1); // 2행 1열부터 데이터 삽입

        // 행 높이 및 열 너비 설정
        sheet.getRange().get("A2:G7").setRowHeight(15);
        sheet.setColumnWidth(2, 15);
        sheet.setColumnWidth(3, 21);
        sheet.setColumnWidth(4, 15);

        // 테두리 스타일 설정
        sheet.getRange().get("A2:G7").borderAround(LineStyleType.Medium);
        sheet.getRange().get("A2:G7").borderInside(LineStyleType.Thin);
        sheet.getRange().get("A2:G2").borderAround(LineStyleType.Medium);
        sheet.getRange().get("A2:G7").getBorders().setKnownColor(ExcelColors.Black);

        // Excel 파일 저장
        wb.saveToFile("output/NewSpreadsheet.xlsx", FileFormat.Version2016);
    }
}

3. Excel 파일 읽기

기존 Excel 파일을 불러와서 데이터를 읽는 작업은 getAllocatedRange() 메서드를 사용하면 데이터가 있는 전체 셀 범위를 한 번에 가져올 수 있어 효율적입니다.

주요 단계:
1. Workbook 객체를 생성하고 loadFromFile()로 파일을 불러옵니다.
2. getWorksheets().get() 메서드로 특정 워크시트를 가져옵니다.
3. getAllocatedRange() 메서드로 데이터가 있는 전체 셀 범위를 가져옵니다.
4. 이중 루프를 통해 각 셀의 값을 getValue()로 읽어 출력합니다.

예제 코드 (읽기):

import com.spire.xls.CellRange;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class ReadData {
    public static void main(String[] args) {
        // Workbook 객체 생성 및 Excel 파일 로드
        Workbook wb = new Workbook();
        wb.loadFromFile("NewSpreadsheet.xlsx");

        // 첫 번째 워크시트 가져오기
        Worksheet sheet = wb.getWorksheets().get(0);

        // 데이터가 있는 셀 범위 가져오기
        CellRange locatedRange = sheet.getAllocatedRange();

        // 모든 행과 열을 순회하며 데이터 출력
        for (int i = 0; i < locatedRange.getRows().length; i++) {
            for (int j = 0; j < locatedRange.getColumnCount(); j++) {
                System.out.print(locatedRange.get(i + 1, j + 1).getValue() + "  ");
            }
            System.out.println();
        }
    }
}

4. Excel 파일 업데이트하기

기존 Excel 파일을 불러와서 특정 셀의 값을 변경하거나 새로운 데이터를 추가하는 작업은 업무 자동화에서 매우 자주 발생합니다.

주요 단계:
1. Workbook 객체를 생성하고 loadFromFile()로 기존 Excel 파일을 불러옵니다.
2. getWorksheets().get() 메서드로 수정할 워크시트를 가져옵니다.
3. getRange() 메서드로 특정 셀을 지정하고, setValue() 메서드로 새로운 값을 설정합니다.
4. saveToFile() 메서드로 변경 사항을 새 파일이나 기존 파일에 저장합니다.

예제 코드 (업데이트):

import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class UpdateExcel {
    public static void main(String[] args) {
        // Workbook 객체 생성
        Workbook wb = new Workbook();

        // 기존 Excel 파일 로드
        wb.loadFromFile("NewSpreadsheet.xlsx");

        // 첫 번째 워크시트 가져오기
        Worksheet sheet = wb.getWorksheets().get(0);

        // 특정 셀(A1)의 값 변경
        sheet.getRange().get("A1").setValue("Updated Value");

        // 변경된 내용을 새 파일로 저장
        wb.saveToFile("output/Updated.xlsx", ExcelVersion.Version2016);
    }
}

이 코드는 기존 파일의 A1 셀 값을 "Updated Value"로 변경하고, output 디렉토리에 Updated.xlsx라는 이름으로 저장합니다. 필요에 따라 동일한 파일 이름으로 저장하여 덮어쓸 수도 있습니다.

5. 추가적인 고려 사항

  • 라이선스: 이 라이브러리는 상용 제품이며, 무료 버전(Free Spire.XLS for Java)도 제공됩니다. 무료 버전은 .xls 파일 읽기/쓰기 시 워크시트 5개, 행 200개로 제한되며, 파일 변환 시 처음 3페이지로 제한되는 등 기능에 제약이 있을 수 있습니다. .xlsx 파일에는 이러한 행 제한이 없습니다. 프로젝트 목적에 맞는 버전을 선택해야 합니다.
  • 오픈소스 대안: 오픈소스 라이선스가 필요하다면 Apache POI를 고려할 수 있습니다. POI는 방대한 사용자층과 풍부한 문서를 가지고 있지만, 이 글에서 소개한 방식에 비해 상대적으로 더 많은 코드 작성이 필요할 수 있습니다.
  • 성능 및 리소스: 대용량 Excel 파일을 다룰 때는 메모리 설정에 유의해야 하며, 작업 완료 후 workbook.dispose()를 호출하여 리소스를 해제하는 것이 좋습니다.

결론

이 글에서는 Java용 Spire.XLS for Java 라이브러리를 사용하여 Excel 문서를 생성하고, 데이터를 읽고, 기존 파일을 업데이트하는 기본적인 방법을 코드 예제와 함께 살펴보았습니다. Workbook, Worksheet, CellRange 클래스를 활용하면 별도의 Microsoft Office 설치 없이도 엑셀 파일을 효과적으로 조작할 수 있습니다. 이는 정기적인 보고서 생성이나 데이터 처리 파이프라인 구축에 유용한 도구가 될 수 있습니다.

0개의 댓글