首页 > 其他 > 详细

Excel批量导入数据之数据校验

时间:2017-07-17 18:10:12      阅读:467      评论:0      收藏:0      [点我收藏+]

 

最近,工作上接到Excel批量导入数据的需求。在这里,小编想分享的是数据校验那些事,至于如何读取Excel数据,大家可以百度下。

一般而言,Excel批量导入数据,我们都会给客户提供一个固定的模板以输入我们期望的数据。然而,客户的操作,我们是无法预料的,他们有可能增加一列或者删除一列,有可能去掉Excel某个字段的输入限制等等。

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

同一个模板,也许因某列数据的不同,而需要填充不同数据列。

......

面对一系列不确定因素,小编在此提出小小的解决方案。

我们可以定义这么一个类:

     public class ExcelTemplate
    {
        /// <summary>
        /// 列名
        /// </summary>
        public string ColumnName { get; set; }

        /// <summary>
        /// 是否必填
        /// </summary>
        public bool IsRequire { get; set; }

        /// <summary>
        /// 列类型
        /// </summary>
        public string ColumnType { get; set; }
    }

 

有这么一个模板:

技术分享

 

创建表头类

var myExcelTemplate = new List<ExcelTemplate>();
myExcelTemplate.Add(new ExcelTemplate() { ColumnName = "序号", IsRequire = true, ColumnType = "string" });
myExcelTemplate.Add(new ExcelTemplate() { ColumnName = "姓名", IsRequire = true, ColumnType = "string" });
myExcelTemplate.Add(new ExcelTemplate() { ColumnName = "入职日期", IsRequire = true, ColumnType = "DateTime" });

 

假如已经成功读取Excel数据

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

 

这时候,校验Excel可以这样子~~

 

            //判断是否存在数据行
            if (excelData == null || excelData.Rows.Count <= 0)
            {
                //不存在数据行
                return;
            }

            //遍历所有行
            foreach (System.Data.DataRow row in excelData.Rows)
            {
                //遍历列
                foreach (var item in myExcelTemplate)
                {
                    //判断列合法性
                    if (!excelData.Columns.Contains(item.ColumnName))
                    {
                        //列非法
                        return;
                    }

                    //判断列是否必填
                    if (item.IsRequire && (row[item.ColumnName] == null || string.IsNullOrWhiteSpace(row[item.ColumnName].ToString())))
                    {
                        //空列
                        return;
                    }

                    //根据列类型尝试类型转换
                    switch (item.ColumnType)
                    {
                        case "DateTime":
                            {
                                if (!row[item.ColumnName].IsDateTime())
                                {
                                    //类型转换失败
                                    return;
                                }
                                break;
                            }
                    }

                    //...

                }
            }

 

欢迎指点哈哈。

Excel批量导入数据之数据校验

原文:http://www.cnblogs.com/maiaimei/p/7196589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!