前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >更好用的excel国际化多语言导出

更好用的excel国际化多语言导出

作者头像
菩提树下的杨过
发布2018-09-20 11:14:29
1.4K0
发布2018-09-20 11:14:29
举报

不知道大家在开发中有没有遇到过『excel导出』的需求,反正我最近写了不少这种功能,刚开始利用poi,一行行的手动塞数据,生成excel,而且还有国际化需求,比如:标题栏有一列,用户切换成"简体中文"时, 导出的标题应该是『用户姓名』,而切换到"英文"时, 导出的标题应该变成『Customer Name』(当然还有一些细节 ,比如英文环境,日期通常是 "月/日/年"格式,而中文格式是"年-月-日")

偶尔干一两次还行,经常这么手动处理,纯体力活就太枯燥了,在一个小伙伴的抱怨下,到网上搜索了下,看看有没有更省力的通用解决方案,还真找到了,比如Excel4J (向原作者致敬,提供这么方便的开源项目)。大致原理是基于注解,用法很简单:

代码语言:javascript
复制
public class Student2 {

    @ExcelField(title = "学号", order = 1)
    private Long id;

    @ExcelField(title = "姓名", order = 2)
    private String name;

    ...
}

打个注解就行,导出一行搞定:

代码语言:javascript
复制
        List<Student2> list = new ArrayList<>();
        ...
        ExcelUtils.getInstance().exportObjects2Excel(list, Student2.class, true, "学生信息", true, BASE_PATH + "student2.xlsx");

不过原作者并没有提供国际化多语言的功能,于是顺着这个思路,略为修改了一下,再定义一个多语言的注解:

代码语言:javascript
复制
/**
 * 国际化标题注解
 *
 * @author 菩提树下的杨过
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface I18nField {

    /**
     * 国际化标题栏(例如: ["zh-cn|学生","en-us|student"])
     *
     * @return 国际化标题配置数组
     */
    String[] titles();

}

导出的地方去判断有无这个注解就行(详细大家可以看源码),修改后,原来的Student2改成:

代码语言:javascript
复制
@Data
public class Student2 {

    @ExcelField(title = "学号", order = 1)
    @I18nField(titles = {"en-us|student id"})
    private Long id;

    @ExcelField(title = "姓名", order = 2)
    @I18nField(titles = {"en-us|name"})
    private String name;

    ...  
}

导出时指定语言:

代码语言:javascript
复制
        List<Student2> list = new ArrayList<>();
       ...
        ExcelUtils.getInstance().exportObjects2Excel(list, Student2.class, true, "student", true, BASE_PATH + "student2-en.xlsx", "en-us");
        ExcelUtils.getInstance().exportObjects2Excel(list, Student2.class, true, "学生信息", true, BASE_PATH + "student2-cn.xlsx", "zh-cn");

效果如下:

中文导出:

英文导出:

修改后的版本,已在github上开源,地址:https://github.com/yjmyzz/Excel4J

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档