회사에서 새로운 요구 사항으로 대시보의 내용을 엑셀 보고서 형식으로 보고싶은 요구사항을 구현하기 위해
어떤 언어와 라이브러리를 사용할지 고민하게 되었다.
우리 팀은 java언어 외 개발 경험을 해본 분이 잘없어서 특별한 이유가 없으면 Java와 POI라이브러리를 사용해 구현 할 것 같지만 다른 언어와 라이브러리를 경험해보고 결정하기로 했다.
아래는 동일한 데이터를 사용해 Apache POI (Java), openpyxl (Python), SheetJS (JavaScript)로 엑셀 파일을 생성하는 예제 코드입니다. 각 라이브러리의 특징과 사용법을 비교하기 위해 동일한 구조와 데이터를 사용합니다.
Sheet Name: "Sample Sheet"
Headers: ["ID", "Name", "Score"]
Data:
1, Alice, 85
2, Bob, 90
3, Charlie, 78
1. Apache POI (Java)
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelWriter {
public static void main(String[] args) {
String[] headers = {"ID", "Name", "Score"};
Object[][] data = {
{1, "Alice", 85},
{2, "Bob", 90},
{3, "Charlie", 78}
};
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sample Sheet");
// 헤더 로우 생성
Row headerRow = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
}
// 데이터 로우 생성
for (int i = 0; i < data.length; i++) {
Row row = sheet.createRow(i + 1);
for (int j = 0; j < data[i].length; j++) {
Cell cell = row.createCell(j);
if (data[i][j] instanceof String) {
cell.setCellValue((String) data[i][j]);
} else if (data[i][j] instanceof Integer) {
cell.setCellValue((Integer) data[i][j]);
}
}
}
try (FileOutputStream fileOut = new FileOutputStream("Sample.xlsx")) {
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Excel file created: Sample.xlsx");
}
}
from openpyxl import Workbook
# Initialize Workbook
workbook = Workbook()
sheet = workbook.active
sheet.title = "Sample Sheet"
# Headers and Data
headers = ["ID", "Name", "Score"]
data = [
[1, "Alice", 85],
[2, "Bob", 90],
[3, "Charlie", 78],
]
# Add Headers
sheet.append(headers)
# Add Data Rows
for row in data:
sheet.append(row)
# Save File
workbook.save("Sample.xlsx")
print("Excel file created: Sample.xlsx")
const XLSX = require("xlsx");
// Headers and Data
const headers = ["ID", "Name", "Score"];
const data = [
[1, "Alice", 85],
[2, "Bob", 90],
[3, "Charlie", 78],
];
// Create Worksheet
const wsData = [headers, ...data];
const ws = XLSX.utils.aoa_to_sheet(wsData);
// Create Workbook
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, "Sample Sheet");
// Write File
XLSX.writeFile(wb, "Sample.xlsx");
console.log("Excel file created: Sample.xlsx");
간결한 API로 빠르게 엑셀 작업 가능.
aoa_to_sheet 메서드를 사용해 2D 배열을 쉽게 워크시트로 변환.
스타일이나 복잡한 설정 작업은 제한적이지만, 기본적인 데이터 처리에 적합.
특징 | Apache POI (Java) | openpyxl (Python) | SheetJS (JavaScript) |
---|---|---|---|
코드 복잡성 | 상대적으로 복잡, 명시적으로 셀 설정 필요 | 간결, Python의 간단한 문법 활용 | 매우 간결, 배열과 객체 활용 |
성능 | 대용량 데이터 처리에 강점 | 중소규모 데이터 처리에 적합 | 중소규모 데이터 처리에 적합 |
스타일링/차트 | 세밀한 스타일링 및 차트 기능 제공 | 스타일링 가능하지만 코드 추가 필요 | 스타일링은 제한적 |
사용 용도 | 엔터프라이즈급 애플리케이션 | 데이터 분석 및 간단한 데이터 처리에 적합 | 웹 기반 간단한 엑셀 처리에 적합 |
출력 형식 지원 | .xls, .xlsx | .xlsx | .xls, .xlsx, CSV, JSON |
학습 곡선 | 높은 편 | 낮음 |