Excel은 데이터를 표 형태로 정리하고 분석하는 데 널리 사용되는 파일 형식입니다. Java 애플리케이션에서 프로그래밍 방식으로 Excel 파일을 조작해야 하는 요구는 보고서 자동화, 데이터 통합, 대량 데이터 처리 등 다양한 분야에서 발생합니다. 이 글에서는 Java용 Spire.XLS for Java 라이브러리를 사용하여 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.7.3</version>
</dependency>
</dependencies>
Maven을 사용하지 않는다면, JAR 파일을 직접 내려받아 프로젝트의 클래스패스에 추가할 수도 있습니다.
새로운 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);
}
}
기존 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();
}
}
}
기존 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라는 이름으로 저장합니다. 필요에 따라 동일한 파일 이름으로 저장하여 덮어쓸 수도 있습니다.
.xls 파일 읽기/쓰기 시 워크시트 5개, 행 200개로 제한되며, 파일 변환 시 처음 3페이지로 제한되는 등 기능에 제약이 있을 수 있습니다. .xlsx 파일에는 이러한 행 제한이 없습니다. 프로젝트 목적에 맞는 버전을 선택해야 합니다.workbook.dispose()를 호출하여 리소스를 해제하는 것이 좋습니다.이 글에서는 Java용 Spire.XLS for Java 라이브러리를 사용하여 Excel 문서를 생성하고, 데이터를 읽고, 기존 파일을 업데이트하는 기본적인 방법을 코드 예제와 함께 살펴보았습니다. Workbook, Worksheet, CellRange 클래스를 활용하면 별도의 Microsoft Office 설치 없이도 엑셀 파일을 효과적으로 조작할 수 있습니다. 이는 정기적인 보고서 생성이나 데이터 처리 파이프라인 구축에 유용한 도구가 될 수 있습니다.