Excel批量導入數據之數據校驗


 

最近,工作上接到Excel批量導入數據的需求。在這里,小編想分享的是數據校驗那些事,至於如何讀取Excel數據,大家可以百度下。

一般而言,Excel批量導入數據,我們都會給客戶提供一個固定的模板以輸入我們期望的數據。然而,客戶的操作,我們是無法預料的,他們有可能增加一列或者刪除一列,有可能去掉Excel某個字段的輸入限制等等。

Excel模板,有可能只有一個,有可能若干個。各個模板的數據列,或交叉相同,或存在個性化列。

同一個模板,也許因某列數據的不同,而需要填充不同數據列。
......

面對一系列不確定因素,小編在此提出小小的解決方案。

我們可以定義這么一個類:

 1      public class ExcelTemplate
 2     {
 3         /// <summary>
 4         /// 列名
 5         /// </summary>
 6         public string ColumnName { get; set; }
 7 
 8         /// <summary>
 9         /// 是否必填
10         /// </summary>
11         public bool IsRequire { get; set; }
12 
13         /// <summary>
14         /// 列類型
15         /// </summary>
16         public string ColumnType { get; set; }
17     }

有這么一個模板:

創建表頭類

1 var myExcelTemplate = new List<ExcelTemplate>();
2 myExcelTemplate.Add(new ExcelTemplate() { ColumnName = "序號", IsRequire = true, ColumnType = "string" });
3 myExcelTemplate.Add(new ExcelTemplate() { ColumnName = "姓名", IsRequire = true, ColumnType = "string" });
4 myExcelTemplate.Add(new ExcelTemplate() { ColumnName = "入職日期", IsRequire = true, ColumnType = "DateTime" });

假如已經成功讀取Excel數據

1 System.Data.DataTable excelData = GetDataFromExcel(excelPath);

這時候,校驗Excel可以這樣子~~

 1             //判斷是否存在數據行
 2             if (excelData == null || excelData.Rows.Count <= 0)
 3             {
 4                 //不存在數據行
 5                 return;
 6             }
 7 
 8             //遍歷所有行
 9             foreach (System.Data.DataRow row in excelData.Rows)
10             {
11                 //遍歷列
12                 foreach (var item in myExcelTemplate)
13                 {
14                     //判斷列合法性
15                     if (!excelData.Columns.Contains(item.ColumnName))
16                     {
17                         //列非法
18                         return;
19                     }
20 
21                     //判斷列是否必填
22                     if (item.IsRequire && (row[item.ColumnName] == null || string.IsNullOrWhiteSpace(row[item.ColumnName].ToString())))
23                     {
24                         //空列
25                         return;
26                     }
27 
28                     //根據列類型嘗試類型轉換
29                     switch (item.ColumnType)
30                     {
31                         case "DateTime":
32                             {
33                                 if (!row[item.ColumnName].IsDateTime())
34                                 {
35                                     //類型轉換失敗
36                                     return;
37                                 }
38                                 break;
39                             }
40                     }
41 
42                     //...
43 
44                 }
45             }


免責聲明!

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



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