-
Notifications
You must be signed in to change notification settings - Fork 60
QA集
样式设置放在表头Column对象上,使用以下setFont
,setFill
,setBorder
,setNumFmt
,setVertical
,setHorizontal
,setWrapText
7个方法设置字体,填充,边框,格式化,垂直对齐,水平对齐和自动折行 7个样式,
由于EEC包含边框、字体和水平对齐3个打底样式,要去除这些打底样式则需要设置新的样式来替换,边框可以使用new Border()
空边框来清除
new Workbook()
.setAutoSize(true) // <- 自适应列宽
.addSheet(new ListSheet<>(randomTestData()
, new Column("整型", "nv").setNumFmt("#,##0_);[Red]-#,##0_);0_)").setFont(new Font("Bauhaus 93", 16))
, new Column("字符串(EN)", "sen").setFont(new Font("Trebuchet MS", 20))
, new Column("字符串(中文)", "scn").setFont(new Font("微软雅黑", 8))
, new Column("日期", "iv").setNumFmt("yyyy-mm-dd hh:mm:ss").setFont(new Font("华文行楷", 14))
)).writeTo(Paths.get("F:/excel/1.xlsx"));
Sheet#ignoreHeader
可忽略表头
new Workbook()
.addSheet(new EmptySheet().ignoreHeader()) // <- 忽略表头
.writeTo(Paths.get("F:/excel/1.xlsx"));
简单转换可以使用ConversionProcessor
,它仅有一个入参和出参作用于Column列
如下代码展示将成绩小于60分的转换为"不合格"
new Workbook()
.addSheet(new ListSheet<>(
new Column("学号", "id"),
new Column("姓名", "name"),
new Column("成绩", "score", n -> (int) n < 60 ? "不合格" : n)
)).writeTo(Paths.get("F:/excel/1.xlsx"));
ConversionProcessor只支持输出转换,如果需要输入转换的话则需要使用Converter
接口,它具有两个方法:一个为conversion
输出转换,一个为reversion
输入转换
下面代码展示将“status”转为状态文本,导入时将状态文本转换'status'值
public class Item {
// 设置转换器
@ExcelColumn(converter = StatusConvert.class)
private int status;
}
public class StatusConvert implements Converter<Integer> {
final String[] statusDesc = { "未开始", "进行中", "完结", "中止" };
@Override
public Integer reversion(Row row, Cell cell, Class<?> fieldClazz) {
for (int i = 0; i < statusDesc.length; i++) {
if (statusDesc[i].equals(row.getString(cell))) {
return i;
}
}
return null;
}
@Override
public Object conversion(Object v) {
return v != null ? statusDesc[(int) v] : null;
}
}
斑马线有利于阅读,EEC使用XMLZebraLineCellValueAndStyle
添加斑马线,除表头外每隔一行设置一个填充色做为斑马线样式
如下示例展示设置橙色斑马线
new Workbook()
.addSheet(new ListSheet<>(Item.randomTestData())
.setCellValueAndStyle(new XMLZebraLineCellValueAndStyle(new Fill(PatternType.solid, Color.orange))))
.writeTo(Paths.get("F:/excel/斑马线.xlsx"));
EEC支持工作簿、工作表和指定列三个维度设置自适应列宽,它们的关键词都是AutoSize
new Workbook()
.setAutoSize(true) // <- 作用于工作薄,所有工作表都自适应列宽
.addSheet(new EmptySheet())
.addSheet(new EmptySheet())
.writeTo(Paths.get("F:/excel/1.xlsx"));
new Workbook()
.addSheet(new EmptySheet().autoSize()) // <- 作用于工作表
.writeTo(Paths.get("F:/excel/1.xlsx"));
new Workbook()
.addSheet(new ListSheet<>(
new Column("学号", "id"),
new Column("姓名", "name").autoSize(), // <- 作用某一列
new Column("成绩", "score"))
).writeTo(Paths.get("F:/excel/1.xlsx"));
缩放是通过扩展参数设置,对应Key为Const.ExtendPropertyKey.ZOOM_SCALE
,范围10-400对应缩放比例10%到400%
new Workbook()
.addSheet(new EmptySheet().putExtProp(Const.ExtendPropertyKey.ZOOM_SCALE, 70)) // <- 设置70%缩放
.writeTo(Paths.get("F:/excel/1.xlsx"));
由于程序越写越复杂,工作表Worksheet新添加功能都需要定义新的属性,为了限制无限增加的属性所以将这些属性放到扩展参数中,扩展参数由一个Map组成,使用putExtProp
设置属性getExtPropValue
获取扩展属性
当前已支持扩展属性有
属性 | 用途 | 类型 |
---|---|---|
FREEZE | 冻结窗格 | Dimension |
STYLE_DESIGN | 运态样式 | StyleProcessor |
MERGE_CELLS | 合并单元格 | List<Dimension> |
AUTO_FILTER | 筛选 | Dimension |
DATA_VALIDATION | 数据验证 | List<Validation> |
ZOOM_SCALE | 缩放 | Integer |
- java.lang.NoSuchMethodError: org.dom4j.io.SAXReader.createDefault()Lorg/dom4j/io/SAXReader; 这个异常是因为dom4j版本不一致,EEC使用的是org.dom4j:dom4j:2.1.3,如果项目中已引入dom4j则需要排除已有的低版本dom4j,低版本dom4j存在XXE安全漏洞不建议使用
让JAVA操作excel更简单