阿里 EasyExcel 表头国际化
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
实体类字段使用EasyExcel提供的注解@ExcelProperty,value 值写成占位符形式 ,匹配 i18n 文件里面的编码。
如:
/**
* 仓库名称
*/
@ExcelProperty("{warehouse.record.warehouseName}")
private String warehouseName;
占位符解析器
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PlaceholderResolver {
/**
* 默认前缀占位符
*/
public static final String DEFAULT_PLACEHOLDER_PREFIX = "{";
/**
* 默认后缀占位符
*/
public static final String DEFAULT_PLACEHOLDER_SUFFIX = "}";
/**
* 默认单例占位符解析器,即占位符前缀为"{", 后缀为"}"
*/
@Getter
private static final PlaceholderResolver defaultResolver = new PlaceholderResolver();
/**
* 占位符前缀
*/
private String placeholderPrefix = DEFAULT_PLACEHOLDER_PREFIX;
/**
* 占位符后缀
*/
private String placeholderSuffix = DEFAULT_PLACEHOLDER_SUFFIX;
/**
* 根据替换规则来替换指定模板中的占位符值
*
* @param content 要解析的字符串
* @param rule 解析规则回调
*/
public String resolveByRule(String content, Function<String, String> rule) {
int start = content.indexOf(this.placeholderPrefix);
if (start == -1) {
return content;
}
StringBuilder result = new StringBuilder(content);
while (start != -1) {
int end = result.indexOf(this.placeholderSuffix, start);
//获取占位符属性值,如{id}, 即获取id
String placeholder = result.substring(start + this.placeholderPrefix.length(), end);
//替换整个占位符内容,即将{id}值替换为替换规则回调中的内容
String replaceContent = placeholder.trim().isEmpty() ? "" : rule.apply(placeholder);
result.replace(start, end + this.placeholderSuffix.length(), replaceContent);
start = result.indexOf(this.placeholderPrefix, start + replaceContent.length());
}
return result.toString();
}
}
自定义拦截器
@RequiredArgsConstructor
public class I18nCellWriteHandler implements CellWriteHandler {
@Resource
private MessageSource messageSource;
@Override
public void beforeCellCreate(CellWriteHandlerContext context) {
if (!context.getHead()) {
return;
}
final List<String> originHeadNames = context.getHeadData().getHeadNameList();
if (CollectionUtils.isEmpty(originHeadNames)) {
return;
}
List<String> newHeadNames = originHeadNames.stream().
map(headName -> PlaceholderResolver.getDefaultResolver()
.resolveByRule(headName, this::getMessage)).
collect(Collectors.toList());
context.getHeadData().setHeadNameList(newHeadNames);
}
public String getMessage(String code) {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(code, null, locale);
}
}
使用
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df
Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io`
3 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)