|
|
|
@ -5,14 +5,11 @@ import java.io.OutputStream;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.LinkedHashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.function.Supplier;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.BorderStyle;
|
|
|
|
|
import org.apache.poi.ss.usermodel.CellStyle;
|
|
|
|
@ -474,19 +471,6 @@ public class XLSWriter extends XLS {
|
|
|
|
|
return cellStyle(new Styler().dataFormat("HH:mm:ss").merge(Styler.CENTER));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<Object> header(Iterable<CellDef> defs, Supplier<Styler> factory) {
|
|
|
|
|
ArrayList<Object> result = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for (CellDef def: defs) {
|
|
|
|
|
result.add(def.label);
|
|
|
|
|
Styler styler = factory.get();
|
|
|
|
|
styler.width(def.width);
|
|
|
|
|
result.add(styler);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**셀스타일 정보. {@link #set(CellStyle) CellStyle을 설정}하는데 사용.
|
|
|
|
|
* @author mjkhan
|
|
|
|
|
*/
|
|
|
|
@ -810,31 +794,122 @@ public class XLSWriter extends XLS {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
/**셀 값과 스타일 설정에 대한 정의
|
|
|
|
|
* @author mjkhan
|
|
|
|
|
*/
|
|
|
|
|
public static class CellDef {
|
|
|
|
|
public static final Map<String, CellDef> toMap(CellDef... defs) {
|
|
|
|
|
return Stream.of(defs).collect(Collectors.toMap(
|
|
|
|
|
def -> def.label,
|
|
|
|
|
def -> def,
|
|
|
|
|
(k1, k2) -> k1,
|
|
|
|
|
LinkedHashMap::new
|
|
|
|
|
));
|
|
|
|
|
/**valueMap에서 CellDef의 필드이름 또는 스타일을 설정한다.
|
|
|
|
|
* @param defs CellDef 목록
|
|
|
|
|
* @param valueMap 레이블별 필드이름 또는 스타일
|
|
|
|
|
*/
|
|
|
|
|
public static void setValues(List<CellDef> defs, Map<String, Object> valueMap) {
|
|
|
|
|
defs.forEach(def -> {
|
|
|
|
|
Object val = valueMap.get(def.label);
|
|
|
|
|
if (val == null)
|
|
|
|
|
val = def.field;
|
|
|
|
|
if (isEmpty(val))
|
|
|
|
|
throw new RuntimeException("Value or style not found for " + def.label);
|
|
|
|
|
|
|
|
|
|
def.value = val;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**CellDef 목록에서 셀헤더 이름과 스타일을 반환한다.
|
|
|
|
|
* @param defs CellDef 목록
|
|
|
|
|
* @param factory 헤더 스타일을 제공하는 function
|
|
|
|
|
* @return 셀헤더 이름과 스타일 목록
|
|
|
|
|
*/
|
|
|
|
|
public static List<Object> header(List<CellDef> defs, Supplier<Styler> factory) {
|
|
|
|
|
ArrayList<Object> result = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for (CellDef def: defs) {
|
|
|
|
|
result.add(def.label);
|
|
|
|
|
|
|
|
|
|
Styler styler = factory.get();
|
|
|
|
|
styler.width(def.width);
|
|
|
|
|
result.add(styler);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String label;
|
|
|
|
|
/**CellDef 목록에서 셀값의 필드이름 또는 스타일 목록을 반환한다.
|
|
|
|
|
* @param defs CellDef 목록
|
|
|
|
|
* @return 셀값의 필드이름 또는 스타일 목록
|
|
|
|
|
*/
|
|
|
|
|
public static Object[] values(List<CellDef> defs) {
|
|
|
|
|
return defs.stream().map(CellDef::getValue).toList().toArray();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String
|
|
|
|
|
label,
|
|
|
|
|
field;
|
|
|
|
|
private int width;
|
|
|
|
|
private Object value;
|
|
|
|
|
|
|
|
|
|
public CellDef(String label, int width, Object value) {
|
|
|
|
|
/**레이블을 반환한다.
|
|
|
|
|
* @return 레이블
|
|
|
|
|
*/
|
|
|
|
|
public String getLabel() {
|
|
|
|
|
return label;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**레이블을 설정한다.
|
|
|
|
|
* @param label 레이블
|
|
|
|
|
* @return 현재 CellDef
|
|
|
|
|
*/
|
|
|
|
|
public CellDef setLabel(String label) {
|
|
|
|
|
this.label = label;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**필드이름을 반환한다.
|
|
|
|
|
* @return 필드이름
|
|
|
|
|
*/
|
|
|
|
|
public String getField() {
|
|
|
|
|
return field;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**필드이름을 설정한다.
|
|
|
|
|
* @param field 필드이름
|
|
|
|
|
* @return 현재 CellDef
|
|
|
|
|
*/
|
|
|
|
|
public CellDef setField(String field) {
|
|
|
|
|
this.field = field;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**넓이를 반환한다.
|
|
|
|
|
* @return 넓이
|
|
|
|
|
* @return 현재 CellDef
|
|
|
|
|
*/
|
|
|
|
|
public int getWidth() {
|
|
|
|
|
return width;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**넓이를 설정한다.
|
|
|
|
|
* @param width 넓이
|
|
|
|
|
* @return 현재 CellDef
|
|
|
|
|
*/
|
|
|
|
|
public CellDef setWidth(int width) {
|
|
|
|
|
this.width = width;
|
|
|
|
|
this.value = value;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**필드이름, 또는 스타일을 반환한다.
|
|
|
|
|
* @return 필드이름, 또는 스타일
|
|
|
|
|
*/
|
|
|
|
|
public Object getValue() {
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**필드이름, 또는 스타일을 설정한다.
|
|
|
|
|
* @param value 필드이름, 또는 스타일
|
|
|
|
|
* @return 현재 CellDef
|
|
|
|
|
*/
|
|
|
|
|
public CellDef setValue(Object value) {
|
|
|
|
|
this.value = value;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|