十六 企業級自定義表單引擎解決方案--Excel導入導出

Excel對于后端管理系統來說,永遠都是繞不開的話題,開發Excel導入導出功能往往都比較麻煩,因為涉及到Excel導入模板制作、Excel表格數據與系統數據庫表字段映射、Excel導入數據驗證、驗證錯誤數據返回給用戶的交互、表格數據唯一判斷(不存在新增,存在則修改),復雜一些的還會涉及到多表頭、合并單元格情況,可能還會涉及到Excel關聯多張數據表的情況 。對于關聯多張表的情況,處理這種Excel映射出來的數據必須手動碼代碼處理,這個是沒辦法的,但是對于其他常規導入導出以及常規的Excel操作,完全可以進行結構化的封裝處理 , 理想的情況下可以做到零代碼實現 。我這里采用的是NOPI來實現的 。
這里是根據表單模板自動生成的Excel導入導出功能,可以開源網站地址查看 。

十六 企業級自定義表單引擎解決方案--Excel導入導出

文章插圖
定義模板每個字段對應Excel里面的一列,可以定義字段名稱、列名稱、字段類型、是否必填、列表頭備注信息、導入驗證類型等關鍵信息 , 定義好信息之后,導入導出所有邏輯都是圍繞著這個模板來進行的,把所有邏輯封裝到一個組件中,那么代碼只需要處理常規的集合對象即可 。
public class ExcelTemplate{/// <summary>/// 字段名稱/// </summary>public string Field { get; set; }/// <summary>/// 列稱/// </summary>public string Name { get; set; }/// <summary>/// 字段類型/// </summary>public EFieldType FieldType { get; set; }/// <summary>/// 列寬(顯示多少個字符)/// </summary>public int CellLength { get; set; }/// <summary>/// 導出模版備注/// </summary>public string ExportComments { get; set; }/// <summary>/// 導入 是否必填/// </summary>public bool IsRequred { get; set; }/// <summary>/// 導入 驗證類型/// </summary>public EValidateType ValidateType { get; set; }/// <summary>/// 導入 驗證類型為String時 , 驗證長度,為Regular,為正則表達式/// </summary>public string ValidateValue { get; set; }/// <summary>/// All = 1,OnlyForExport = 2(只在導入導出Excel使用),OnlyForImport = 3(只在導入導入Excel使用)/// </summary>public ETemplateForUse? TemplateForUse { get; set; }}【十六 企業級自定義表單引擎解決方案--Excel導入導出】配置示例:
"excelTemplate": [{"name": "字符","field": "stringField","fieldType": 5,"isRequred": true,"validateType": 0},{"name": "日期字段","field": "dateTimeField","fieldType": 7,"validateType": 10},{"name": "字典字段","field": "dictField","fieldType": 5,"validateType": 11},{"name": "數字","field": "intField","fieldType": 1,"validateType": 1},{"name": "長字符","field": "textField","fieldType": 5,"validateType": 0},{"name": "編號","field": "autoNoField","fieldType": 5,"templateForUse": 2,"validateType": 0},{"name": "浮點字段","field": "decimalField","fieldType": 2,"validateType": 3},{"name": "日期字段2","field": "dateField","fieldType": 6,"validateType": 9}]導入常規驗證在模板中可以定義字段的約束信息,比如字段類型、長度、驗證表達式等,在導入的時候,組件自動驗證對應字段是否滿足約束 。
導入自定義驗證對于一些業務 , 常規驗證不能滿足情況時 , 組件可以允許用戶傳入驗證委托函數 , 自定義驗證邏輯 。
導入錯誤生成錯誤Excel導入Excel出錯時,組件輸出一個錯誤Excel,包括導入統計信息,導入出錯行的原始數據,出錯的行號 , 出錯行的具體出錯信息,如:
十六 企業級自定義表單引擎解決方案--Excel導入導出

文章插圖
自動生成導入模板可根據Excel模板配置信息,生成導入數據所需的模板,不需要每一個業務單獨事先生成導入需要的靜態Excel模板信息 。
自定義表單處理自定義表單肯定是要做到零代碼的,那么這個就比較簡單了,在模板生成表單配置時,根據對象信息(對象信息里面有字段名稱、顯示名稱、字段類型等信息),讀取特定的字段構造Excel模板即可 。
Excel組件的封裝已經在源碼中,代碼就不貼了,可以根據需要應用到自己的系統中,也可以根據需求進行修改、比如導入某行出錯其他數據是導入還是不處理等 。
wike文檔地址:https://gitee.com/kuangqifu/sprite/wikis/pages后端開源地址:https://gitee.com/kuangqifu/sprite
前端開源地址:https://gitee.com/kuangqifu/spritefronts體驗地址:http://47.108.141.193:8031 (首次加載可能有點慢,用的阿里云最差的服務器)自定義表單文章地址:https://www.cnblogs.com/spritekuang/流程引擎文章地址:https://www.cnblogs.com/spritekuang/category/834975.html (采用WWF開發,已過時,已改用Elsa實現,https://www.cnblogs.com/spritekuang/p/14970992.html )

推薦閱讀