Browse Source

1.README.md增加测试类的跳转

2.WriteTest类中增加数据验证自定义拦截器的案例
pull/3015/head
tmlx1990 2 years ago
parent
commit
ccdc73f232
  1. 7
      easyexcel-test/README.md
  2. 38
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DataValidationSheetWriteHandler.java
  3. 19
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java

7
easyexcel-test/README.md

@ -1,3 +1,8 @@
# easyexcel-test
测试案例
测试案例
* [写的填充写法(Fill)](src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java)
* [读的常见写法](src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java)
* [web读写案例](src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java)
* [写的常见写法](src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java)

38
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DataValidationSheetWriteHandler.java

@ -0,0 +1,38 @@
package com.alibaba.easyexcel.test.demo.write;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.handler.context.SheetWriteHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.util.CellRangeAddressList;
/**
* 自定义拦截器实现对特定列增加数据验证
*
* @author Xin Yan
*/
@Slf4j
public class DataValidationSheetWriteHandler implements SheetWriteHandler {
@Override
public void afterSheetCreate(SheetWriteHandlerContext context) {
log.info("第{}个Sheet写入成功。", context.getWriteSheetHolder().getSheetNo());
// 设置验证生效的范围,四个参数分别为:起始行,终止行,起始列,终止列
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 10, 1, 1);
DataValidationHelper helper = context.getWriteSheetHolder().getSheet().getDataValidationHelper();
// 设置验证方式
DataValidationConstraint constraint = helper.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN,
"Date(1900, 1, 1)", "Date(2999, 12, 31)", "yyyy-MM-dd");
// 创建验证对象
DataValidation dataValidation = helper.createValidation(constraint, cellRangeAddressList);
// 错误提示信息
dataValidation.createErrorBox("提示","请输入正确格式日期[yyyy-MM-dd]");
dataValidation.setShowErrorBox(true);
context.getWriteSheetHolder().getSheet().addValidationData(dataValidation);
}
}

19
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java

@ -704,6 +704,25 @@ public class WriteTest {
EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList());
}
/**
* 数据验证自定义拦截器
* <p>
* 对日期标题列进行数据验证如果格式不为yyyy-MM-dd则提示输入错误
* <p>
* 1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>
* 2. 注册拦截器 {@link DataValidationSheetWriteHandler}
* <p>
* 3. 直接写即可
*/
@Test
public void DataValidationHandlerWrite() {
String fileName = TestFileUtil.getPath() + "customHandlerWrite" + System.currentTimeMillis() + ".xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new DataValidationSheetWriteHandler())
.sheet("模板").doWrite(new ArrayList<>());
}
private List<LongestMatchColumnWidthData> dataLong() {
List<LongestMatchColumnWidthData> list = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {

Loading…
Cancel
Save