Browse Source

Merge 4ab217adaa into aae9c61ab6

pull/3015/merge
Xin Yan 5 months ago committed by GitHub
parent
commit
cd0c93f7b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 7
      easyexcel-test/README.md
  2. 38
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DataValidationSheetWriteHandler.java
  3. 34
      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);
}
}

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

@ -705,6 +705,40 @@ 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<>());
}
@Test
public void sheetCol(){
String fileName = TestFileUtil.getPath() + "customCol" + System.currentTimeMillis() + ".xlsx";
try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).includeColumnFieldNames(Arrays.asList("string","date","doubleData")).build()) {
// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
WriteSheet writeSheet = EasyExcel.writerSheet("模板").includeColumnFieldNames(Arrays.asList("string","date")).build();
excelWriter.write(data(), writeSheet);
writeSheet = EasyExcel.writerSheet(1,"模板1").needHead(false).build();
// 第二次写如也会创建头,然后在第一次的后面写入数据
WriteTable string = EasyExcel.writerTable().needHead(true).includeColumnFieldNames(Arrays.asList("string")).build();
excelWriter.write(data(),writeSheet,string);
}
}
private List<LongestMatchColumnWidthData> dataLong() {
List<LongestMatchColumnWidthData> list = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {

Loading…
Cancel
Save