HSSFWorkbook이나 XSSFWorkbook를 사용하면 각각 xls/xlsx 확장 파일만 사용할 수 있다.
WorkbookFactory를 사용하면 각 확장자별로 따로 구현하지 않아도 된다.
XSSFWorkbook과 SXSSFWorkbook에 대한 내용은 아래 포스팅을 참고 바란다.
XSSFWorkbook : POI (XSSFWorkbook Example)
SXSSFWorkbook : POI (SXSSFWorkbook Example)
Workbook 생성
Workbook writeWorkbook = WorkbookFactory.create(new FileInputStream("파일경로"));
Workbook을 사용하는 것 이외에는 동일하다.
String excelReadFullPath = "C:/DevLog/20230221/devlog(SXSSF)_202302210904009.xlsx";
//생성일자
Calendar cal = Calendar.getInstance() ;
SimpleDateFormat timeFormat = new SimpleDateFormat("yyyyMMddhhmmsss");
String time = timeFormat.format(cal.getTime());
String excelWriteFullPath = String.format("%s_%s.xls", "C:/DevLog/20230221/devlog(Factory)", time);
//read workbook 생성
File readFile = new File(excelReadFullPath);
Workbook readWorkbook = WorkbookFactory.create(readFile);
//sheet
Sheet sheet = readWorkbook.getSheet("DevLog");
//readData
Map<String, String> readData = new HashMap<String, String>();
//row 개수
int nMaxRowCnt = sheet.getPhysicalNumberOfRows();
for(int nRow = 0 ; nRow < nMaxRowCnt ; nRow++) {
//row Object
Row row = sheet.getRow(nRow);
//col 개수
int nMaxColCnt = row.getPhysicalNumberOfCells();
for(int nCol = 0 ; nCol < nMaxColCnt ; nCol++) {
Cell cell = row.getCell(nCol);
String key = String.format("%s/%s", nRow, nCol);
readData.put(key, cell.toString());
}
}
//file copy
File wirteFile = new File(excelWriteFullPath);
FileCopyUtils.copy(readFile, wirteFile);
//write workbook 생성
FileInputStream fis = new FileInputStream(wirteFile);
Workbook writeWorkbook = WorkbookFactory.create(fis);
//sheet
Sheet writeSheet = writeWorkbook.createSheet("Factory");
for(Entry<String, String> entry : readData.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
//row, col 바꿔서 출력
int excelRow = Integer.parseInt(key.split("/")[1]);
int excelCol = Integer.parseInt(key.split("/")[0]);
Row row;
if(writeSheet.getRow(excelRow) != null) {
row = writeSheet.getRow(excelRow);
}else {
row = writeSheet.createRow(excelRow);
}
Cell cell = row.createCell(excelCol);
cell.setCellValue(value);
}
OutputStream fos = new FileOutputStream(wirteFile);
writeWorkbook.write(fos);
fis.close();
fos.close();
실행 전 Directory
Excel Data
실행 후 Directory
.xlsx파일을 Open 하여 xls파일을 생성한 것을 확인할 수 있다.
Excel Data
Factory Sheet가 생성되었고 ROW와 COL을 변경하여 출력된 것을 확인 할 수 있다.
[JAVA] Excel - POI (SXSSFWorkbook Example) (10) | 2023.02.22 |
---|---|
[JAVA] Excel - POI (XSSFWorkbook Example) (6) | 2023.02.21 |
댓글 영역