java通用xls匯出設計

2023-05-23 06:02:19

背景

在後端日常開發中總會有各種各樣的匯出需求,實現這個需求必須要解決的兩個問題:

1、表頭不能直接使用欄位名,需要顯示為中文,甚至還需要考慮國際化

2、值需要翻譯,比如性別、狀態之類的欄位

現狀

現在主流寫的比較好的方法是定義一個物件,物件上用自定義的註解+easytrans

我的解決方案

定義要匯入的欄位

1、解決表頭與欄位的對映

2、表頭加#進行後續split,解決翻譯問題

{
    "parkls": {
        "parkname": "停車場",
        "carno": "車牌號",
        "intime": "進場時間",
        "outtime": "出場時間",
        "paytime": "支付時間",
        "parktime": "停車時長(單位:分鐘)",
        "amt":"支付金額(單位:元)",
        "paytype":"支付方式#paytype",
        "paystatus":"支付狀態#paystatus",
        "isrecharge":"是否重新計費#YN",
        "ismonthcard":"是否月卡抵扣#YN"        
    }
}
翻譯
{
    "YN": {
        "Y": "",
        "N": ""
    },
    "paystatus": {
        "0": "待支付",
        "1": "已支付",
        "2": "已過期"
    },
    "paytype":{
        "0": "微信支付",
        "1": "月卡支付",
        "2": "現金",
        "3":"餘額"
    }
}
載入設定
package com.xf.tools;

import java.io.File;
import java.io.FileNotFoundException;
import java.net.URL;
import java.nio.charset.Charset;

import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.val;

public class ExcelDeal {

    public static JSONObject head;
    public static JSONObject trans;

    public synchronized static void load() throws FileNotFoundException {
        URL url = ClassLoader.getSystemResource("exporthead.json");
//        head = JSONUtil.readJSONObject(new File(url.getPath()), Charset.forName("utf-8"));
        String jsonstr = FileUtil.readString(new File(url.getPath()), Charset.forName("utf-8"));
        val config = JSONConfig.create().setOrder(true);
        head = JSONUtil.parseObj(jsonstr, config);
        url = ClassLoader.getSystemResource("trans.json");
//        trans = JSONUtil.readJSONObject(new File(url.getPath()), Charset.forName("utf-8"));
        jsonstr = FileUtil.readString(new File(url.getPath()), Charset.forName("utf-8"));
        trans = JSONUtil.parseObj(jsonstr, config);
    }
}
寫xls

這個方法我就不上了,留點大家發揮的空間。

主要是分享下自已的思路,歡迎大家交流。