상세 컨텐츠

본문 제목

[JAVA] Excel - POI (WorkbookFactory)

Spring/POI

by Chan.94 2023. 2. 26. 20:47

본문

반응형

WorkbookFactory

HSSFWorkbook이나 XSSFWorkbook를 사용하면 각각 xls/xlsx 확장 파일만 사용할 수 있다.

WorkbookFactory를 사용하면 각 확장자별로 따로 구현하지 않아도 된다.

 

XSSFWorkbook과 SXSSFWorkbook에 대한 내용은 아래 포스팅을 참고 바란다.

XSSFWorkbook : POI (XSSFWorkbook Example)

SXSSFWorkbook : POI (SXSSFWorkbook Example)

 


WorkbookFactory 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을 변경하여 출력된 것을 확인 할 수 있다.

반응형

'Spring > POI' 카테고리의 다른 글

[JAVA] Excel - POI (SXSSFWorkbook Example)  (10) 2023.02.22
[JAVA] Excel - POI (XSSFWorkbook Example)  (6) 2023.02.21

관련글 더보기

댓글 영역

>