zoukankan      html  css  js  c++  java
  • 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             }
  • 相关阅读:
    [MacOS]Sublime text3 安装(一)
    [RHEL8]开启BBR
    PAT Advanced 1136 A Delayed Palindrome (20分)
    PAT Advanced 1144 The Missing Number (20分)
    PAT Advanced 1041 Be Unique (20分)
    PAT Advanced 1025 PAT Ranking (25分)
    PAT Advanced 1022 Digital Library (30分)
    PAT Advanced 1019 General Palindromic Number (20分)
    PAT Advanced 1011 World Cup Betting (20分)
    PAT Advanced 1102 Invert a Binary Tree (25分)
  • 原文地址:https://www.cnblogs.com/maiaimei/p/7196589.html
Copyright © 2011-2022 走看看