Java中excel字典轉換

? 背景說明

EasyExcel 原生的 @ExcelProperty 注解不支持 dictType(不像那樣有 @Excel(dictType="xxx")),所以如果你想實現字典翻譯功能,就需要自己實現 Converter 接口,比如 DictConvert


? 什么是 DictConvert

DictConvert 是你可以 自定義的通用字段轉換器類,其核心思想是:

  • 輸入參數:字典類型 dictType(比如 "sys_user_status"

  • 行為

    • Java 值 "1" → Excel 中顯示 "啟用"

    • Excel 顯示 "啟用" → Java 中變成 "1"


? 接口定義

下面是一個典型的 DictConvert 實現

是一個 Excel 導入導出過程中的 數據字典轉換器 DictConvert,它是配合 EasyExcel 使用的,用于將 Excel 中的“中文字段”與系統中的“字典值”進行自動雙向轉換

方向行為說明
Excel → Java中文值 ? 字典編碼如 “啟用” → "1"
Java → Excel字典編碼 ? 中文值如 "1" → “啟用”

?并且通過自定義注解 @DictFormat("dictType") 標注字段,讓你不需要為每個字段寫單獨的 Converter

/*** Excel 數據字典轉換器** @author 芋道源碼*/
@Slf4j
public class DictConvert implements Converter<Object> {@Overridepublic Class<?> supportJavaTypeKey() {throw new UnsupportedOperationException("暫不支持,也不需要");}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {throw new UnsupportedOperationException("暫不支持,也不需要");}@Overridepublic Object convertToJavaData(ReadCellData readCellData, ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) {// 使用字典解析String type = getType(contentProperty);String label = readCellData.getStringValue();String value = DictFrameworkUtils.parseDictDataValue(type, label);if (value == null) {log.error("[convertToJavaData][type({}) 解析不掉 label({})]", type, label);return null;}// 將 String 的 value 轉換成對應的屬性Class<?> fieldClazz = contentProperty.getField().getType();return Convert.convert(fieldClazz, value);}@Overridepublic WriteCellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) {// 空時,返回空if (object == null) {return new WriteCellData<>("");}// 使用字典格式化String type = getType(contentProperty);String value = String.valueOf(object);String label = DictFrameworkUtils.parseDictDataLabel(type, value);if (label == null) {log.error("[convertToExcelData][type({}) 轉換不了 label({})]", type, value);return new WriteCellData<>("");}// 生成 Excel 小表格return new WriteCellData<>(label);}private static String getType(ExcelContentProperty contentProperty) {return contentProperty.getField().getAnnotation(DictFormat.class).value();}}

?


? 使用方法

你在導出類中這樣使用:

@ExcelProperty(value = "狀態", converter = UserStatusDictConvert.class) private String status;

或者想進一步封裝成通用的用法(多個字段共享)可借助策略或注冊器統一配置。


? 總結一下

項目說明
名稱DictConvert 是自定義的 EasyExcel 通用字段轉換器
作用實現字典值與顯示名稱之間的雙向轉換
用途用于 Excel 的導入導出字段字典翻譯
優點多字段通用、支持動態加載字典(如從 Redis、數據庫)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89465.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89465.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89465.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構-3(雙向鏈表、循環鏈表、棧、隊列)

一、思維導圖二、雙向循環鏈表的判空、尾插、遍歷(反向)、尾刪class Node:def __init__(self, data):self.data dataself.next Noneself.prior Noneclass circularDoublyLinkedList():def __init__(self):self.head Noneself.tail Noneself.size 0def isEmpty(self):retu…

IDEA運行Tomcat一直提示端口被占用(也查不到該端口)

首先查看是否是因為Java程序異常終止&#xff0c;進程沒有完全釋放導致。打開資源管理器&#xff0c;找到所有的java.exe&#xff0c;強制結束任務。如果仍然不行&#xff0c;那就極可能還是開啟了hyper-V虛擬化&#xff0c;查看排除的tcp端口范圍端口號沒被占用卻提示占用&…

AWS Lambda 最佳實踐:構建高效無服務器應用的完整指南

引言 AWS Lambda 作為無服務器計算的核心服務,讓開發者能夠專注于業務邏輯而無需管理服務器。本文將通過實際案例和代碼示例,分享 Lambda 開發中的關鍵最佳實踐。 1. 函數設計原則 單一職責原則 每個 Lambda 函數應該只做一件事,這樣更容易測試、維護和擴展。 # ? 不推…

29、鴻蒙Harmony Next開發:深淺色適配和應用主題換膚

目錄 應用深淺色適配 應用跟隨系統的深淺色模式 應用主動設置深淺色模式 系統默認判斷規則 使用建議與限制 設置應用內主題換膚 概述 自定義主題色 設置應用內組件自定義主題色 設置應用局部頁面自定義主題風格 設置應用頁面局部深淺色 系統缺省token色值 應用深淺…

源鑒SCA4.9︱多模態SCA引擎重磅升級,開源風險深度治理能力再次進階

SCA技術已成為數字供應鏈開源治理的關鍵入口。源鑒SCA深度融合懸鏡原創專利級AI智能代碼疫苗技術&#xff0c;是國內首款集源碼組件成分分析、代碼成分溯源分析、制品成分二進制分析、容器鏡像成分掃描、運行時成分動態追蹤及開源供應鏈安全情報預警分析等六大核心引擎為一體的…

Git語義化提交規范及提交模板設置

Git語義化提交規范&#xff08;Conventional Commits&#xff09; &#x1f4da; 常見的語義化提交類型包括&#xff1a;類型含義說明feat? 新增功能&#xff08;feature&#xff09;fix&#x1f41b; 修復 bugdocs&#x1f4da; 修改文檔&#xff08;如 README&#xff09;st…

用TensorFlow進行邏輯回歸(五)

Softmax分類#List3-50%matplotlib inlineimport numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltx1_label0 np.random.normal(1, 1, (100, 1))x2_label0 np.random.normal(1, 1, (100, 1))x1_label1 np.random.normal(5, 1, (100, 1))x2_label1 np.ran…

基于 Django + 協同過濾算法的電影推薦系統設計與實現

&#x1f3ac; 基于 Django 協同過濾算法的電影推薦系統設計與實現?? 本項目由成都理工大學宜賓校區的三位同學曾銘楊、楊皓麟、陳禧錦共同完成。項目以豆瓣電影數據為基礎&#xff0c;通過協同過濾算法為用戶構建個性化電影推薦服務&#xff0c;是一款集數據爬取、推薦算法…

小白全棧項目部署指南

小白全棧項目部署指南&#xff1a;前端后端數據庫完整攻略 &#x1f4d6; 寫在前面 當你學會了基礎的靜態網站部署后&#xff0c;是不是想挑戰更有趣的項目&#xff1f;比如一個能夠注冊登錄、保存數據的完整應用&#xff1f; 這就需要學習全棧項目部署了&#xff01; 別被&quo…

C# Linq 左關聯查詢詳解與實踐

在 C# 開發中&#xff0c;Linq&#xff08;Language Integrated Query&#xff09;提供了強大的數據查詢能力&#xff0c;尤其是在處理集合間的關聯操作時。本文將詳細解析 C# Linq 中的左關聯查詢&#xff0c;并通過實際案例說明其用法。左關聯查詢基礎左關聯&#xff08;Left…

【機器學習深度學習】LoRA 微調詳解:大模型時代的高效適配利器

目錄 前言 一、LoRA 的核心思想 二、LoRA 為什么高效&#xff1f; ? 1. 參數效率 ? 2. 內存友好 ? 3. 即插即用 三、LoRA 適用場景 四、LoRA 實踐建議 五、LoRA 和全參數微調對比 六、 LoRA的具體定位 &#x1f4cc; 總結 &#x1f517; 延伸閱讀 前言 在大模型…

vue頁面不銷毀的情況下再返回,總是執行created,而不觸發 activated

vue頁面不銷毀的情況下再返回&#xff0c;總是執行created&#xff0c;而不觸發 activated 原因&#xff1a; 沒有進行頁面緩存地址和頁面組件的name沒對上 解決方案: 組件只有在被 包裹時才會觸發 activated 和 deactivated 生命周期 如果沒有被緩存&#xff0c;每次進入路由…

從 C# 到 Python:6 天極速入門(第二天)

作為一名資深 C# 開發者&#xff0c;我們在第一天已經掌握了 Python 的基礎語法框架。今天我們將深入 Python 的特色語法與高級特性&#xff0c;通過實際項目開發場景的代碼對比&#xff0c;理解這些特性在真實業務中的應用價值。一、簡潔語法糖&#xff1a;項目開發中的實戰應…

MyBatis 動態 SQL:讓 SQL 語句隨條件靈活變化

目錄 1. 動態SQL 1.1. if 1.1.1. 持久層接口添加方法 1.1.2. 映射文件添加標簽 1.1.3. 編寫測試方法 1.2. where 1.3. set 1.4. choose、when、otherwise 1.5. foreach 1.5.1. 遍歷數組 1.5.2. 遍歷Collection 1.5.3. 遍歷Map 2. 總結 前言 本文來講解MyBatis的動…

AI 驅動的儀表板:從愿景到 Kibana

作者&#xff1a;來自 Elastic Jeffrey Rengifo 及 Toms Mura 使用 LLM 處理圖像并將其轉換為 Kibana 儀表板。 想獲得 Elastic 認證&#xff1f;了解下一次 Elasticsearch Engineer 培訓的舉辦時間&#xff01; Elasticsearch 擁有眾多新功能&#xff0c;幫助你為你的使用場景…

AI產品經理面試寶典第17天:AI時代敏捷開發與MVP構建面試題與答法

機器學習MVP構建問題怎么答? 面試官:請舉例說明如何將業務問題轉化為機器學習可解的問題? 你的回答:以電商供應商評價為例,傳統方法用人工設定的低維度指標評分,而機器學習能利用大數據構建高維模型。比如通過供應商歷史交易數據、物流時效、售后投訴率等數百個特征,訓…

HBase2.5.4單機模式與偽分布式的安裝與配置(Ubuntu系統)

HBase的安裝也分為三種&#xff0c;單機模式、偽分布式模式、完全分布式模式&#xff1b;我們先來安裝單機版。 一、環境準備 1. 系統要求 Ubuntu 20.04/22.04 LTS Java 8&#xff08;必須&#xff0c;HBase不兼容更高版本&#xff09; Hadoop&#xff08;單機模式不需要&a…

Honeywell霍尼韋爾DV-10 變速器放大器 輸入 15-28 VDC,輸出 +/- 10VDC 060-6881-02

Honeywell霍尼韋爾DV-10 變速器放大器 輸入 15-28 VDC,輸出 /- 10VDC 060-6881-02

騰訊位置商業授權鴻蒙地圖SDK工程配置

工程配置 安裝 DevEco Studio 開發環境 手機HarmonyOS系統&#xff1a;OpenHarmony-5.0.0.71及以上DevEco Studio版本&#xff1a;DevEco Studio NEXT Release(Build Version: 5.0.3.900)及以上 獲取key與生成秘鑰 獲取key 登錄騰訊位置服務控制臺&#xff0c;未注冊過賬號可…

RocketMQ源碼級實現原理-Commitlog刷盤機制

刷盤機制 同步刷盤 代碼實現 寫入線程 寫入線程可能同時有多個&#xff0c;但是刷盤線程至始至終就是一個單線程 刷盤線程&#xff0c;始終是操作雙緩沖區域&#xff0c;一個用來刷盤&#xff0c;另一個用來接收多個寫入線程同時寫入刷盤請求 刷盤線程 通過這種方式&#xff0…