EasyExcel 自适应列宽、隐藏列、动态列、单元格下拉框选择数据、单元格文本格式
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
前言
项目中用到EasyExcel读写Excel,用到了一下功能,这里做个笔记:
- 列宽自适应:自适应宽度
- 隐藏列:隐藏某些列
- 动态列:固定列 + 动态的生成Excel列
- 单元格下拉框选择数据:设计单元格下拉数据,并且加校验
- 单元格文本格式:设置文本格式
EasyExcel 版本:3.0.x
核心代码实现
- 列宽自适应: 注册一个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 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)