自定义导出 - wujiuye/miniexcel GitHub Wiki
适应场景:
- 使用同一个java类,在不同的业务下导出不同的标题,那么可以在
@ExcelCellTitle
注解的基础上,动态的修改@ExcelCellTitle
注解指定的列名; - 使用同一个java类,在不同的业务下忽略掉一些列;
导出列指示器也可以在不使用@ExcelCellTitle
注解的情况下,设置导出忽略的字段,设置字段对应导excel
的列标题。
/**
* @author wujiuye
* @version 1.0 on 2019/10/10 {描述:
* 列指示器
* }
*/
public interface ColumnsDesignator {
/**
* 是否忽略该列
* 一般使用注解,除非有特殊需求
*
* @param column data的数据类型的字段名
* @return
*/
boolean isIgnore(String column);
/**
* 是否需要重命名
* 一般使用注解,除非有特殊需求
*
* @param fieldName data的数据类型的字段名
* @param currentColumnName 当前使用的列名,也就是从注解上面获取的,如果注解没有配置,则等于字段名
* @return 不需要重命名则直接返回参数currentColumnName,需要重命名则返回重命名后的列名(excel文件的标题名称)
*/
String renameColumn(String fieldName, String currentColumnName);
}
使用案例:
public class DataExportTest{
@Test
public void testExportCD() {
AbstractExcelWriter excelWriter = AbstractExcelWriter.createExcelWriter(System.out, ExcelFileType.XLSX);
excelWriter.setSheetSize(1000)
.setBrushPageSize(1000)
.setSheetNameFromat("Sheet{sn}");
// 指定忽略哪些列
Set<String> ignoreColumn = new HashSet<>();
excelWriter.write(new ExcelWriteListenerAdapter<DateModel>(DateModel.getTestData(), 1000) {
}, new ColumnsDesignator() {
@Override
public boolean isIgnore(String column) {
if (CollectionUtils.isEmpty(ignoreColumn)) {
return false;
}
// 返回true即为忽略。
// 相反的,如果只相导出某些列,则可以改为: return !ignoreColumn.contains(column);
return ignoreColumn.contains(column);
}
// 第二个参数:如果字段上没有注解,该值为字段名;如果字段上有注解,则是注解指定的列名(有声明的情况下);
@Override
public String renameColumn(String fieldName, String currentColumnName) {
// 将列名“SPU商品ID“替换为”SKU商品ID“
if (currentColumnName.equalsIgnoreCase("SPU商品ID")) {
return "SKU商品ID";
}
return currentColumnName;
}
});
}
}