当前位置:   article > 正文

EasyExcel 自适应列宽、隐藏列、动态列、单元格下拉框选择数据、单元格文本格式

EasyExcel 自适应列宽、隐藏列、动态列、单元格下拉框选择数据、单元格文本格式

前言

项目中用到EasyExcel读写Excel,用到了一下功能,这里做个笔记:

  1. 列宽自适应:自适应宽度
  2. 隐藏列:隐藏某些列
  3. 动态列:固定列 + 动态的生成Excel列
  4. 单元格下拉框选择数据:设计单元格下拉数据,并且加校验
  5. 单元格文本格式:设置文本格式

EasyExcel 版本:3.0.x

EasyExcel官方文档

核心代码实现

  • 列宽自适应: 注册一个EasyExcel内置的宽度策略对象即可
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
  • 1
  • 动态列:这里使用的 List 集合
List<List<String>> heads = new ArrayList<>();
List<String> head0 = new ArrayList<>();
// 固定列
head0.add("ID");
heads.add(head0);
List<String> head1 = new ArrayList<>();
head1.add("Name");
heads.add(head1);
// 动态列
for (xxx) {
	List<String> dnys = new ArrayList<>();
	dnys.add("Colxx");
	heads.add(.);
}
List<String> end = new ArrayList<>();
end.add("End");
heads.add(end);

// 设置列
EasyExcel.write(out).head(heads)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 单元格下拉框选择数据:注册一个SheetWriteHandler接口实现类 afterSheetCreate 方法,这里使用匿名内部类。
.registerWriteHandler(
    new SheetWriteHandler() {
        @Override
        public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
            Sheet sheet = writeSheetHolder.getSheet();
            DataValidationHelper helper = sheet.getDataValidationHelper();
            // 设置下拉列表单元格的位置首行 末行 首列 末列
            CellRangeAddressList rangeList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
            // 设置下拉列表的值:strArr 为字符串数组,下拉框的值
            DataValidationConstraint constraint = helper.createExplicitListConstraint(strArr);
            // 设置错误提示
            DataValidation validation = helper.createValidation(constraint, rangeList);
            // 非下拉选项的值不能输入
            validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
            validation.setSuppressDropDownArrow(true);
            validation.setShowErrorBox(true);
            validation.createErrorBox("提示", "请选择/输入下拉选项中的值");
            sheet.addValidationData(validation);
        }
    }
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 单元格隐藏、单元格文本格式:注册一个CellWriteHandler,覆盖afterCellDispose方法,这里使用匿名类
.registerWriteHandler(new CellWriteHandler() {
    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        // 设置隐藏列
        context.getWriteSheetHolder().getSheet().setColumnHidden(0, true);
        for (WriteCellData<?> writeCellData : context.getCellDataList()) {
            // 设置文本格式
            DataFormatData dataFormatData = new DataFormatData();
            dataFormatData.setIndex((short) 49);
            writeCellData.getOrCreateStyle().setDataFormatData(dataFormatData);
        }
    }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

最后指定sheet名称,写入数据即可。

.sheet("导入").doWrite(datas)
  • 1
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号