[java] Java Apache POI를 사용하여 Excel 파일의 정렬 설정하기

Apache POI는 Java에서 Microsoft Office 파일을 생성, 수정 및 처리하는 데 사용되는 라이브러리입니다. 이번에는 Apache POI를 사용하여 Excel 파일의 정렬을 설정하는 방법에 대해 알아보겠습니다.

1. Maven Dependency 추가하기

프로젝트의 pom.xml 파일에 Apache POI 의존성을 추가해줍니다.

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

2. Excel 파일 생성하기

먼저 Apache POI를 사용하여 Excel 파일을 생성합니다. 이 예제에서는 간단한 예시를 위해 Workbook에 하나의 Sheet를 생성하고 몇 가지 데이터를 입력하겠습니다.

// 필요한 라이브러리 import
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelSortExample {
    public static void main(String[] args) {
        // 새로운 Workbook 생성
        Workbook workbook = new XSSFWorkbook();

        // 새로운 Sheet 생성
        Sheet sheet = workbook.createSheet("ExampleSheet");

        // 데이터 작성
        Row row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue("Name");
        row1.createCell(1).setCellValue("Age");

        Row row2 = sheet.createRow(1);
        row2.createCell(0).setCellValue("John");
        row2.createCell(1).setCellValue(25);

        Row row3 = sheet.createRow(2);
        row3.createCell(0).setCellValue("Jane");
        row3.createCell(1).setCellValue(30);

        // Excel 파일 저장
        try (FileOutputStream fileOut = new FileOutputStream("example.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Workbook 리소스 해제
        workbook.close();
    }
}

3. Excel 파일의 정렬 설정하기

이제 Excel 파일의 정렬을 설정해보겠습니다. 예를 들어, Name 열을 기준으로 오름차순으로 정렬하려면 다음과 같이 작성할 수 있습니다.

// 정렬할 열 인덱스
int sortColumnIndex = 0;

// 정렬하기 전에 Sheet에서 DataFormatter를 사용해서 데이터 타입을 텍스트로 변환해주는 것이 좋습니다.
DataFormatter dataFormatter = new DataFormatter();
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();

// 정렬 대상 열을 기준으로 값을 추출한 다음, 정렬합니다.
ArrayList<String[]> sortingData = new ArrayList<>();
for (Row row : sheet) {
    Cell sortColumnCell = row.getCell(sortColumnIndex);
    String sortColumnValue = dataFormatter.formatCellValue(sortColumnCell, formulaEvaluator);
    String[] rowData = new String[] { sortColumnValue, dataFormatter.formatCellValue(row.getCell(1)) };
    sortingData.add(rowData);
}

// 정렬
sortingData.sort(Comparator.comparing(o -> o[0]));

// 정렬된 데이터를 다시 Excel 파일에 쓰기
for (int i = 0; i < sortingData.size(); i++) {
    Row row = sheet.getRow(i);
    if (row == null) {
        row = sheet.createRow(i);
    }
    row.getCell(sortColumnIndex).setCellValue(sortingData.get(i)[0]);
    row.getCell(1).setCellValue(sortingData.get(i)[1]);
}

// 정렬된 Excel 파일 저장
try (FileOutputStream fileOut = new FileOutputStream("example_sorted.xlsx")) {
    workbook.write(fileOut);
} catch (IOException e) {
    e.printStackTrace();
}

위 예제에서는 Name 열을 기준으로 오름차순으로 정렬한 후, 정렬된 데이터를 Excel 파일로 저장합니다.

결론

Apache POI를 사용하여 Excel 파일의 정렬을 설정하는 방법에 대해 알아보았습니다. 이를 통해 Java 언어로 Excel 파일을 다룰 때 간편하게 정렬할 수 있습니다. 참고로, Apache POI는 다양한 기능과 메서드를 제공하기 때문에 다른 Excel 작업에도 유용하게 사용할 수 있습니다.

참고 자료