From ccdc73f2329cfe9c71f271b1f6bd6a99277bb658 Mon Sep 17 00:00:00 2001 From: tmlx1990 Date: Thu, 2 Mar 2023 14:53:56 +0800 Subject: [PATCH] =?UTF-8?q?1.README.md=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=B1=BB=E7=9A=84=E8=B7=B3=E8=BD=AC=202.WriteTest=E7=B1=BB?= =?UTF-8?q?=E4=B8=AD=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8B=A6=E6=88=AA=E5=99=A8=E7=9A=84?= =?UTF-8?q?=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyexcel-test/README.md | 7 +++- .../DataValidationSheetWriteHandler.java | 38 +++++++++++++++++++ .../easyexcel/test/demo/write/WriteTest.java | 19 ++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DataValidationSheetWriteHandler.java diff --git a/easyexcel-test/README.md b/easyexcel-test/README.md index 299588a0..7692b703 100644 --- a/easyexcel-test/README.md +++ b/easyexcel-test/README.md @@ -1,3 +1,8 @@ # easyexcel-test -测试案例 \ No newline at end of file +测试案例 + +* [写的填充写法(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) \ No newline at end of file diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DataValidationSheetWriteHandler.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DataValidationSheetWriteHandler.java new file mode 100644 index 00000000..e920dac3 --- /dev/null +++ b/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); + } +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index 705c2b53..4cf832f9 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/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()); } + /** + * 数据验证自定义拦截器 + *

+ * 对日期标题列进行数据验证,如果格式不为yyyy-MM-dd则提示输入错误 + *

+ * 1. 创建excel对应的实体对象 参照{@link DemoData} + *

+ * 2. 注册拦截器 {@link DataValidationSheetWriteHandler} + *

+ * 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 dataLong() { List list = ListUtils.newArrayList(); for (int i = 0; i < 10; i++) {