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

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

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

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

public class Student2 {
    @ExcelField(title = "学号", order = 1)
    private Long id;
    @ExcelField(title = "姓名", order = 2)
    private String name;
    ...
}

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

        List<Student2> list = new ArrayList<>();
        ...
        ExcelUtils.getInstance().exportObjects2Excel(list, Student2.class, true, "学生信息", true, BASE_PATH + "student2.xlsx");

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

/**
 * 国际化标题注解
 *
 * @author 菩提树下的杨过
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface I18nField {
    /**
     * 国际化标题栏(例如: ["zh-cn|学生","en-us|student"])
     *
     * @return 国际化标题配置数组
     */
    String[] titles();
}

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

@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;
    ...  
}

导出时指定语言:

        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");

效果如下:

中文导出:

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

英文导出:

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

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

免责声明:文章转载自《更好用的excel国际化多语言导出》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL 8 新特性之Clone Plugin(转)用 cairo 实现跨平台图形下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于英语作文AI批改的思考(含定向高分方案)

在科技高速发展的今天,借助于AI,我们的老师终于能摆脱繁重的作业批改任务,从而把时间投入到更高效的教学工作中去。然而,我在多次的体验中,越来越发现AI批改英语作文的弊病。 有时候自己认真敲出来的作文,甚至还没有别人随便一篇中文翻译出来的分数高。 自己的语法明明正确,但是却一直报错。 自己不甘80分的命运,疯狂输入大量优美句子,然而分数仍然不涨。 在看到别...

ubuntu修改中文文件夹名字为英文

为了使用起来方便,装了ubuntu中文版,自然在home文件里用户目录的“桌面”、“图片”、“视频”、“音乐”……都是中文的。    很多时候都喜欢在桌面上放一些要操作的文件,Linux里命令行操作又多,难免会用命令行操作桌面上的东西,那么就要 “cd  桌面”,打“桌面”的时候要输入法切换,麻烦……所以就想办法把用户目录下的路径改成英文,而其他的中文不变...

繁体系统下如何快速将简体安装文件乱码恢复正常?

很多情况下,我们个人或集体使用的Windows操作系统不仅仅是简体中文环境,也有英文/繁体中文语言环境。 有时候会需要安装不同语言环境的程序(软件)来使用。但是在英文/繁体中文系统安裝下安装了简体中文程序后,就出现了乱码文件名。 这里也只能建议各个程序员最好还是将程序和软件的名字和路径尽量设置为英文 或 英文加数字。 解决方法:  将已经安装的乱码文件夹,...

谷歌拼音输入法快速切换中英文解决中英文混合打字问题

在用输入法打字的时候,会遇到中英文混合,那么就是要切换中英文状态,比较麻烦。在谷歌拼音输入法中,如何快速切换中英文状态?小编这里有两种方法,都是操作简单的,大家不妨参考下。 一、回车输入英文 第一种方法称为"回车输入英文",即在输入英文后按下回车键(而不是常用的空格键)。 二、V模式 第二种方法称之为"v模式",即在输入英文前先输入字母"v",然后按空格...

英语论文中 'The' 的使用

标题不用加the 英文期刊文章的标题力求简练,所以把the省掉。进一步的,a/an也可以省掉。 加the不能说错,毕竟语法正确,但显得啰嗦,最好去掉。 有一类论文比较例外,题目中大都有冠词,那就是综述。一般以‘an overview of …’或‘a review of …’,当然也有不加冠词的,直接‘review of …’,我看了很多文章,加不加冠词应...

python学习--练习题111213--分阶段判断问题、输出指定日期格式问题、统计字符问题

练习11 #利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 学习成绩=float(input("请输入你的学习成绩:")) def 分数判定(): if 学习成绩 <60: print("你的学习成绩在60以下,判定为C") elif 学习成绩...