前言

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

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

EasyExcel 版本:3.0.x

EasyExcel官方文档

核心代码实现

  • 列宽自适应: 注册一个EasyExcel内置的宽度策略对象即可
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
  • 动态列:这里使用的 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)
  • 单元格下拉框选择数据:注册一个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);
        }
    }
)
  • 单元格隐藏、单元格文本格式:注册一个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);
        }
    }
})

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

.sheet("导入").doWrite(datas)
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io` 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐