FAICS/src/main/java/kcg/faics/cmmn/excel/ExcelExporter.java

133 lines
3.1 KiB
Java

package kcg.faics.cmmn.excel;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* 엑셀 변환 클래스.
*
* @author kimnomin
*
* @param <T> 데이터 VO
*/
public class ExcelExporter<T> extends AbstractExcelExport {
/**
* 헤더 맵 객체.
* <해당 VO의 멤버변수명, 값> 형태
* ex) {title: 제목}
*
* 해당 맵 객체에 입력된 순서대로 엑셀이 생성된다.
*
* !! 주의 !! 해당 맵 객체의 key가 데이터 VO의 멤버변수명과 동일해야 한다.
*/
private LinkedHashMap<String, String> headers;
/**
* 데이터 VO List.
*/
private List<T> list;
/**
* 엑셀 내 표현될 제목.
*/
private String title;
/**
* 생성자.
*
* @param headers 헤더 맵 객체.
* @param list 데이터 VO List.
* @param title 엑셀 내 표현될 제목.
*/
public ExcelExporter(final LinkedHashMap<String, String> headers, final List<T> list,
final String title) {
super();
this.headers = headers;
this.list = list;
this.title = title;
}
@Override
public XSSFWorkbook makeExcel(final XSSFWorkbook wb) {
if (list.size() <= 0 || headers.size() <= 0) {
return null;
}
XSSFSheet sheet = null;
XSSFRow row = null;
XSSFCell cell = null;
ExcelStyle style = new ExcelStyle(wb);
sheet = wb.createSheet(title);
setTitleRow(sheet, style.titleStyle, title);
Set<String> keySet = headers.keySet();
// 헤더
int loopIdx = 0;
row = sheet.createRow(firstRow);
cell = row.createCell(loopIdx);
cell.setCellValue("번호");
cell.setCellStyle(style.headerStyle);
loopIdx++;
for (String key : keySet) {
cell = row.createCell(loopIdx);
cell.setCellValue(headers.get(key));
cell.setCellStyle(style.headerStyle);
loopIdx++;
}
// 값
for (int i = 0; i < list.size(); i++) {
T t = list.get(i);
row = sheet.createRow(firstRow + 1 + i);
loopIdx = 0;
cell = row.createCell(loopIdx);
cell.setCellValue(i + 1);
cell.setCellStyle(style.normalTextStyle);
loopIdx++;
for (String key : keySet) {
String value = "";
try {
if (t instanceof Map<?, ?>) {
Object o = ((Map<?, ?>) t).get(key.toLowerCase());
if (o instanceof String) {
value = o.toString();
} else if (o instanceof Integer || o instanceof Double || o instanceof Long) {
value = String.valueOf(o);
} else if (o instanceof BigDecimal) {
value = ((BigDecimal) o).toString();
}
} else {
Field f = t.getClass().getDeclaredField(key);
f.setAccessible(true);
Object val = f.get(t);
if (val != null) {
value = val.toString();
}
}
} catch (Exception e) {
e.printStackTrace();
}
cell = row.createCell(loopIdx);
cell.setCellValue(value);
cell.setCellStyle(style.normalTextStyle);
loopIdx++;
}
}
return wb;
}
}