更好用的excel國際化多語言導出


不知道大家在開發中有沒有遇到過『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");

效果如下:

中文導出:

英文導出:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM