public async Task ExcelToDataBase2()
        {
            var errorMsg = new StringBuilder(); // 错误信息
            try
            {
                // 1.1存放Excel文件到本地服务器
                HttpFileCollectionBase files = Request.Files;
                HttpPostedFileBase filePost = files["filed"];
                string filePath = ExcelUtility.SaveExcelFile(filePost); // 保存文件并获取文件路径

                // 单元格抬头
                // key:实体对象属性名称,可通过反射获取值
                // value:属性对应的中文注解
                Dictionary<string, string> cellheader = new Dictionary<string, string> {
                    //{ "PlanSubject", "赠送计划标题" },
                    //{ "MobileNo", "手机号码" },
                    //{ "TelcoOperatorText", "手机运营商" },
                    //{ "Name", "姓名" },
                    //{ "Age", "年龄" },
                    //{ "Gender", "性别" },
                    //{ "Chiness", "语文成绩" },
                    //{ "Math", "数学成绩" },
                    { "KidName", "姓名" },
                    { "Gender", "性别" },
                    {"KidNumber", "公民身份号码" },
                    {"Nation", "民族"},
                    {"Birthday", "出生日期"},
                    {"PoliceStation", "派出所"},
                    {"TownOrStreet", "乡镇(街道)"},
                    {"Committee", "居委会"},
                    {"OtherAddress", "其他详址"},
                    {"Road", "街路巷"},
                    {"HouseNumber", "门楼牌号"},
                    {"HouseAddress", "门楼详址"},
                    {"HouseOwner", "户主姓名"},
                    {"RelationShip", "与户主关系"},
                    {"Phone", "电话号码"},
                    {"MoveCityDate", "何时迁来"},
                    {"MoveCityReason", "何因来本市"},
                    {"MoveAddressDate", "何时来本址"},
                    {"MoveAddressReason", "何因来本址"},
                    {"GuardianOneName", "监护人一姓名"},
                    {" GuardianOneCardNumber", "监护人一身份号码"},
                    {"GuardianOneRelation", "监护人一关系"},
                    {"GuardianTwoName", "监护人二姓名"},
                    {"GuardianTwoCardNumber", "监护人二身份号码"},
                    {" GuardianTwoRelation", "监护人二关系"},
                    
                };

                // 1.2解析文件,存放到一个List集合里
                var enlist = ExcelUtility.ExcelToList<LdGaKidInfo>(cellheader, filePath, out errorMsg);


                #region 2.对List集合进行有效性校验

                #region 2.1检测必填项是否必填

                for (int i = 0; i < enlist.Count; i++)
                {
                    var en = enlist[i];
                    string errorMsgStr = "第" + (i + 1) + "行数据检测异常:";
                    bool isHaveNoInputValue = false; // 是否含有未输入项
                    if (string.IsNullOrEmpty(en.KidName))
                    {
                        errorMsgStr += "姓名列不能为空;";
                        isHaveNoInputValue = true;
                    }
                    if (isHaveNoInputValue) // 若必填项有值未填
                    {
                        //en.IsExcelVaildateOK = false;
                        errorMsg.AppendLine(errorMsgStr);
                    }
                }

                #endregion

                #region 2.2检测Excel中是否有重复对象

                for (int i = 0; i < enlist.Count; i++)
                {
                    var enA = enlist[i];
                    //if (enA.IsExcelVaildateOK == false) // 上面验证不通过,不进行此步验证
                    //{
                    //    continue;
                    //}

                    for (int j = i + 1; j < enlist.Count; j++)
                    {
                        var enB = enlist[j];
                        // 判断必填列是否全部重复
                        if (enA.KidName == enB.KidName)
                        {
                            //enA.IsExcelVaildateOK = false;
                            //enB.IsExcelVaildateOK = false;
                            errorMsg.AppendLine("第" + (i + 1) + "行与第" + (j + 1) + "行的必填列重复了");
                        }
                    }
                }

                #endregion

                // TODO:其他检测

                #endregion

                // 3.TODO:对List集合进行持久化存储操作。如:存储到数据库

                // 4.返回操作结果
                bool isSuccess = false;
                if (errorMsg.Length == 0)
                {
                    isSuccess = true; // 若错误信息成都为空,表示无错误信息
                }
                var rs = new { success = isSuccess, msg = errorMsg.ToString(), data = enlist };
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
                Response.ContentType = "text/plain";
                Response.Write(js.Serialize(rs)); // 返回Json格式的内容
            }
            catch (Exception)
            {
                throw;
            }
        }
        public async Task ExcelToDataBase()
        {
            var errorMsg = new StringBuilder(); // 错误信息
            try
            {
                // 1.1存放Excel文件到本地服务器
                HttpFileCollectionBase files = Request.Files;
                HttpPostedFileBase filePost = files["filed"];
                string filePath = ExcelUtility.SaveExcelFile(filePost); // 保存文件并获取文件路径

                // 单元格抬头
                // key:实体对象属性名称,可通过反射获取值
                // value:属性对应的中文注解
                Dictionary<string, string> cellheader = new Dictionary<string, string> {
                    //{ "PlanSubject", "赠送计划标题" },
                    //{ "MobileNo", "手机号码" },
                    //{ "TelcoOperatorText", "手机运营商" },
                    { "Name", "姓名" },
                    { "Age", "年龄" },
                    { "Gender", "性别" },
                    { "Chiness", "语文成绩" },
                    { "Math", "数学成绩" },
                };

                // 1.2解析文件,存放到一个List集合里
                var enlist = ExcelUtility.ExcelToList<StudentViewModel>(cellheader, filePath, out errorMsg);


                #region 2.对List集合进行有效性校验

                #region 2.1检测必填项是否必填

                for (int i = 0; i < enlist.Count; i++)
                {
                    var en = enlist[i];
                    string errorMsgStr = "第" + (i + 1) + "行数据检测异常:";
                    bool isHaveNoInputValue = false; // 是否含有未输入项
                    if (string.IsNullOrEmpty(en.Name))
                    {
                        errorMsgStr += "姓名列不能为空;";
                        isHaveNoInputValue = true;
                    }
                    if (isHaveNoInputValue) // 若必填项有值未填
                    {
                        //en.IsExcelVaildateOK = false;
                        errorMsg.AppendLine(errorMsgStr);
                    }
                }

                #endregion

                #region 2.2检测Excel中是否有重复对象

                for (int i = 0; i < enlist.Count; i++)
                {
                    var enA = enlist[i];
                    //if (enA.IsExcelVaildateOK == false) // 上面验证不通过,不进行此步验证
                    //{
                    //    continue;
                    //}

                    for (int j = i + 1; j < enlist.Count; j++)
                    {
                        var enB = enlist[j];
                        // 判断必填列是否全部重复
                        if (enA.Name == enB.Name)
                        {
                            //enA.IsExcelVaildateOK = false;
                            //enB.IsExcelVaildateOK = false;
                            errorMsg.AppendLine("第" + (i + 1) + "行与第" + (j + 1) + "行的必填列重复了");
                        }
                    }
                }

                #endregion

                // TODO:其他检测

                #endregion

                // 3.TODO:对List集合进行持久化存储操作。如:存储到数据库

                // 4.返回操作结果
                bool isSuccess = false;
                if (errorMsg.Length == 0)
                {
                    isSuccess = true; // 若错误信息成都为空,表示无错误信息
                }
                var rs = new { success = isSuccess, msg = errorMsg.ToString(), data = enlist };
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
                Response.ContentType = "text/plain";
                Response.Write(js.Serialize(rs)); // 返回Json格式的内容
            }
            catch (Exception)
            {
                throw;
            }
        }