excel Apache POI jar 파일들은 다음과 같아야 한다.
이와 같은 버전이 아니면 오류가 발생할 수 있으니,
다음 사진과 같이 버전별로 맞출 필요가 있다.
하나하나 maven에서 다운로드하는 것이 귀찮기 때문에 알집으로 google 드라이브 링크를 공유해드리겠다. 귀찮은 분들은 다운로드 gogo!
build.gradle
// excel Apache POI
implementation 'org.apache.poi:poi:4.1.2'
implementation 'org.apache.poi:poi-ooxml:4.1.2'
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(new File("example.xlsx"));
Workbook workbook = WorkbookFactory.create(file);
Sheet sheet = workbook.getSheetAt(0);
DataFormatter formatter = new DataFormatter();
for (Row row : sheet) {
for (Cell cell : row) {
System.out.print(formatter.formatCellValue(cell) + "\t"); // 탭으로 구분
}
System.out.println(); // 줄바꿈
}
file.close();
System.out.println("엑셀에서 데이터 읽어오기 끝");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(new File("example.xlsx"));
Workbook workbook = WorkbookFactory.create(file);
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
switch (cell.getCellType()) {
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
Date dateValue = cell.getDateCellValue();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(dateValue);
System.out.print(formattedDate);
} else {
double numericValue = cell.getNumericCellValue();
// 정수인지 실수인지 구분
// 정수
if (numericValue == Math.floor(numericValue)) {
int intValue = (int) numericValue;
System.out.print(intValue);
// 실수
} else {
System.out.print(numericValue + "\t");
}
}
break;
case STRING:
DataFormatter formatter = new DataFormatter();
String stringValue = formatter.formatCellValue(cell);
System.out.print(stringValue + "\t");
break;
case BOOLEAN:
boolean booleanValue = cell.getBooleanCellValue();
System.out.print(booleanValue + "\t");
break;
case FORMULA:
String formulaValue = cell.getCellFormula();
System.out.print(formulaValue + "\t");
break;
case BLANK:
System.out.print("\t");
break;
default:
System.out.print("\t");
break;
}
}
System.out.println(); // 줄바꿈
}
file.close();
System.out.println("엑셀에서 데이터 읽어오기 끝");
} catch (IOException e) {
e.printStackTrace();
}
}
public class ExcelWriter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<MemberVO> members = new ArrayList<>();
while (true) {
System.out.print("이름을 입력하세요:");
String name = scanner.nextLine();
if (name.equals("quit")) {
//System.exit(-1);
break;
}
System.out.print("나이를 입력하세요:");
int age = scanner.nextInt();
scanner.nextLine(); // 개행문자 제거
System.out.print("생년월일을 입력하세요:");
String birthdate = scanner.nextLine();
System.out.print("전화번호를 입력하세요:");
String phone = scanner.nextLine();
System.out.print("주소를 입력하세요:");
String address = scanner.nextLine();
System.out.print("결혼여부를 입력하세요 (true/false):");
boolean isMarried = scanner.nextBoolean();
scanner.nextLine(); // 개행문자 제거
MemberVO member = new MemberVO(name, age, birthdate, phone, address, isMarried);
members.add(member);
}
scanner.close();
try {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("회원 정보");
// 헤더 생성
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("이름");
headerRow.createCell(1).setCellValue("나이");
headerRow.createCell(2).setCellValue("생년월일");
headerRow.createCell(3).setCellValue("전화번호");
headerRow.createCell(4).setCellValue("주소");
headerRow.createCell(5).setCellValue("결혼여부");
// 헤더 색깔 변경
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 헤더 가운데 정렬
headerStyle.setAlignment(HorizontalAlignment.CENTER);
// 글자 굵기 진하게 변경
Font font = workbook.createFont();
font.setBold(true);
headerStyle.setFont(font);
// 테두리 전체 적용
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
for (Cell cell : headerRow) {
cell.setCellStyle(headerStyle);
}
// 데이터 생성
for (int i = 0; i < members.size(); i++) {
MemberVO member = members.get(i);
Row row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(member.getName());
row.createCell(1).setCellValue(member.getAge());
row.createCell(2).setCellValue(member.getBirthdate());
row.createCell(3).setCellValue(member.getPhone());
row.createCell(4).setCellValue(member.getAddress());
Cell marriedCell = row.createCell(5);
marriedCell.setCellValue(member.isMarried());
}
// 엑셀 파일 저장
String filename = "members.xlsx";
FileOutputStream outputStream = new FileOutputStream(new File(filename));
workbook.write(outputStream);
workbook.close();
System.out.println("엑셀 파일이 저장되었습니다: " + filename);
} catch (IOException e) {
System.out.println("엑셀 파일 저장 중 오류가 발생했습니다.");
e.printStackTrace();
}
}
}
...
try {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("도서 목록");
// 헤더 스타일 설정
CellStyle headerStyle = workbook.createCellStyle();
// 굵은 bold 처리
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerStyle.setFont(headerFont);
headerStyle.setFillForegroundColor(IndexedColors.AQUA.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Row headerRow = sheet.createRow(0);
List<String> headerList = List.of("ISBN", "카테고리", "제목", "저자", "출판사", "부연설명", "대여여부");
for (int i = 0; i < headerList.size(); i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headerList.get(i));
cell.setCellStyle(headerStyle);
}
for (int i = 0; i < bookList.size(); i++) {
Row row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(bookList.get(i).getId());
row.createCell(1).setCellValue(bookList.get(i).getCategory());
row.createCell(2).setCellValue(bookList.get(i).getTitle());
row.createCell(3).setCellValue(bookList.get(i).getWriter());
row.createCell(4).setCellValue(bookList.get(i).getPublisher());
row.createCell(5).setCellValue(bookList.get(i).getDescription());
row.createCell(6).setCellValue(bookList.get(i).isRented() == true ? "대여중" : "대여가능");
}
...