excel上传循环到datatable之中

224 篇文章 3 订阅
    /// <summary>
        /// 上传年金
        /// </summary>
        /// <param name="files">PostYearSalary</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult PostYearSalary(IEnumerable<HttpPostedFileBase> files)
        {
            var DicMess = BLL.PostSalaryServer.PostYearSalary(files);
            return Json(DicMess, JsonRequestBehavior.AllowGet);
        }
   /// <summary>
    /// 年金部分
    /// </summary>
    public class PostSalaryServer
    {
        #region 上传年金
        public static Dictionary<string, string> PostYearSalary(IEnumerable<HttpPostedFileBase> files)
        {

            #region 逻辑处理

            Dictionary<string, string> DicMess = new Dictionary<string, string>();
            DicMess.Add("OK", "");
            DicMess.Add("Err", "");
            Models.SalaryModel salaryModel = new Models.SalaryModel();
            List<ExcelShellMode> list_ExcelShell = salaryModel.Database.SqlQuery<ExcelShellMode>("SELECT ExcelName, ExcelShell,COUNT(0) AS ExcelShellCount FROM Comparative GROUP BY ExcelName,ExcelShell HAVING COUNT(ExcelShell) > 0").Where(n => n.ExcelName == "年金").ToList();
            int C_Name_Index = salaryModel.Database.SqlQuery<int>("select ExcelCell from Comparative where ExcelName = '年金' and ExcelRowCellName = '姓名'").ToList()[0];
            

            foreach (var file in files)
            {
                #region 年金的部分

                ISheet sheet;
                string filename = Path.GetFileName((file.FileName));
                var fileExt = Path.GetExtension(filename);
                //这里循环shell

                if (fileExt == ".xls" || fileExt == ".xlsx")
                {  
                    #region MyRegion
                    if (fileExt == ".xls")
                    {
                        HSSFWorkbook hssfwb = new HSSFWorkbook(file.InputStream); 
                        #region saves 在这里进行循环添加shell 页码的数据到 datatable 到数据库
                        for (int a = 0; a < list_ExcelShell.Count; a++)
                        {
                            #region 循环不同的shell 页
                            sheet = hssfwb.GetSheetAt(a); // 在这里循环
                            try
                            {
                                DataTable table = new DataTable();
                                IRow headerRow = sheet.GetRow(0);// 从第0行进行读取
                                int cellCount = headerRow.LastCellNum;
                                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                                {
                                    DataColumn column = new DataColumn(headerRow.GetCell(i).ToString());
                                    table.Columns.Add(column);
                                }
                                int rowCount = sheet.LastRowNum;
                                // for (int i = 1; i < sheet.LastRowNum; i++)// 从第3行循环
                                for (int i = (sheet.FirstRowNum) + 1; i < sheet.LastRowNum; i++)
                                {
                                    IRow row = sheet.GetRow(i);
                                    DataRow dataRow = table.NewRow();

                                    for (int j = row.FirstCellNum; j < cellCount; j++)
                                    {
                                        #region 判断类型
                                        ICell RCells = row.GetCell(j);
                                        if (RCells != null)
                                        {
                                            try
                                            {
                                                switch (RCells.CellType)  //注意按单元格格式分类取值
                                                {
                                                    case CellType.Numeric:    //用于取出数值和公式类型的数据 
                                                        dataRow[j] = RCells.NumericCellValue;

                                                        break;
                                                    case CellType.Error:
                                                        dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                                        break;
                                                    case CellType.Formula:
                                                        switch (row.GetCell(j).CachedFormulaResultType)
                                                        {
                                                            case CellType.String:
                                                                string strFORMULA = row.GetCell(j).StringCellValue;
                                                                if (strFORMULA != null && strFORMULA.Length > 0)
                                                                {
                                                                    dataRow[j] = strFORMULA.ToString();
                                                                }
                                                                else
                                                                {
                                                                    dataRow[j] = null;
                                                                }
                                                                break;
                                                            case CellType.Numeric:
                                                                dataRow[j] = Convert.ToString(row.GetCell(j).NumericCellValue);
                                                                break;
                                                            case CellType.Boolean:
                                                                dataRow[j] = Convert.ToString(row.GetCell(j).BooleanCellValue);
                                                                break;
                                                            case CellType.Error:
                                                                dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                                                break;
                                                            default:
                                                                dataRow[j] = "";
                                                                break;
                                                        }
                                                        break;
                                                    case CellType.Boolean:
                                                        // Boolean type
                                                        dataRow[j] = RCells.BooleanCellValue.ToString();
                                                        break;

                                                    case CellType.Blank:
                                                        break;

                                                    default:
                                                        // String type
                                                        dataRow[j] = RCells.StringCellValue.Trim();
                                                        break;
                                                }
                                            }
                                            catch (Exception e)
                                            {

                                                DicMess["Err"] = "导入成功,读取excel格式出错";
                                            }
                                        }
                                        else { dataRow[j] = ""; }
                                        #endregion
                                    }
                                    #region 将数据保存到对应的数据库之中  


                                    #endregion
                                    //save

                                    table.Rows.Add(dataRow);
                                }
                            }
                            catch (Exception e)
                            {
                                DicMess["Err"] = "导入成功,读取数据发生错误";

                            }

                            #endregion
                            #region 这个进行更新部分进行的

                            #endregion
                        }
                        #endregion

                    }
                    else
                    {
                        XSSFWorkbook hssfwb = new XSSFWorkbook(file.InputStream);

                        #region saves 在这里进行循环添加shell 页码的数据到 datatable 到数据库
                        for (int a = 0; a < list_ExcelShell.Count; a++)
                        {
                            #region 循环不同的shell 页
                            sheet = hssfwb.GetSheetAt(a); // 在这里循环
                            try
                            {
                                DataTable table = new DataTable();
                                IRow headerRow = sheet.GetRow(0);// 从第0行进行读取
                                int cellCount = headerRow.LastCellNum;
                                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                                {
                                    DataColumn column = new DataColumn(headerRow.GetCell(i).ToString());
                                    table.Columns.Add(column);
                                }
                                int rowCount = sheet.LastRowNum;
                                // for (int i = 1; i < sheet.LastRowNum; i++)// 从第3行循环
                                for (int i = (sheet.FirstRowNum) + 1; i < sheet.LastRowNum; i++)
                                {
                                    IRow row = sheet.GetRow(i);
                                    DataRow dataRow = table.NewRow();

                                    for (int j = row.FirstCellNum; j < cellCount; j++)
                                    {
                                        var Save_C_Name = ""; // 这个是找到这行的名字
                                        if (C_Name_Index == j)
                                        {
                                              Save_C_Name ="";
                                        }
                                        #region 判断类型
                                        ICell RCells = row.GetCell(j);
                                        if (RCells != null)
                                        {
                                            try
                                            {
                                                switch (RCells.CellType)  //注意按单元格格式分类取值
                                                {
                                                    case CellType.Numeric:    //用于取出数值和公式类型的数据 
                                                        dataRow[j] = RCells.NumericCellValue;

                                                        break;
                                                    case CellType.Error:
                                                        dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                                        break;
                                                    case CellType.Formula:
                                                        switch (row.GetCell(j).CachedFormulaResultType)
                                                        {
                                                            case CellType.String:
                                                                string strFORMULA = row.GetCell(j).StringCellValue;
                                                                if (strFORMULA != null && strFORMULA.Length > 0)
                                                                {
                                                                    dataRow[j] = strFORMULA.ToString();
                                                                }
                                                                else
                                                                {
                                                                    dataRow[j] = null;
                                                                }
                                                                break;
                                                            case CellType.Numeric:
                                                                dataRow[j] = Convert.ToString(row.GetCell(j).NumericCellValue);
                                                                break;
                                                            case CellType.Boolean:
                                                                dataRow[j] = Convert.ToString(row.GetCell(j).BooleanCellValue);
                                                                break;
                                                            case CellType.Error:
                                                                dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                                                break;
                                                            default:
                                                                dataRow[j] = "";
                                                                break;
                                                        }
                                                        break;
                                                    case CellType.Boolean:
                                                        // Boolean type
                                                        dataRow[j] = RCells.BooleanCellValue.ToString();
                                                        break;

                                                    case CellType.Blank:
                                                        break;

                                                    default:
                                                        // String type
                                                        dataRow[j] = RCells.StringCellValue.Trim();
                                                        break;
                                                }
                                            }
                                            catch (Exception e)
                                            {

                                                DicMess["Err"] = "导入成功,读取数据发生错误";
                                            }
                                            Save_C_Name = (dataRow[j] == null || string.IsNullOrWhiteSpace(dataRow[j].ToString())? "": dataRow[j].ToString());
                                        }
                                        else { dataRow[j] = ""; Save_C_Name = ""; }
                                        #endregion
                                      
                                    }
                                 
                                    table.Rows.Add(dataRow);
                                }

                            }
                            catch (Exception e)
                            {
                                DicMess["Err"] = "导入成功,读取数据发生错误";

                            }

                            #endregion

                        }
                        #endregion
                    }

                    #endregion
                    DicMess["OK"] = "导入成功" + DicMess["OK"];

                }
                else
                {
                    DicMess["Err"] = "导入文件不是Excel请从新上传";

                }


                #endregion




            }


            return DicMess;
            #endregion


        }

        #endregion


        #region 保存工资信息


        /// <summary>
        /// 保存工资信息所需的文件信息
        /// </summary>
        /// <param name="files"></param>
        /// <returns></returns>
        public static Dictionary<string, string> SaveAttendanceSalaryFiles(IEnumerable<HttpPostedFileBase> files, string Time)
        {
            Dictionary<string, string> DicMess = new Dictionary<string, string>();
            DicMess.Add("OK", "");
            DicMess.Add("Err", "");
            #region 进行逻辑处理这里需要进行处理多张excel 的数据
            foreach (var file in files)
            {
                string filename = Path.GetFileName((file.FileName));// 带物理路径的名称
                string getfilename = Path.GetFileNameWithoutExtension(file.FileName);//文件名称 
                string fileExt = Path.GetExtension(filename);// 后缀
                #region 1.检查上传文件所需项目 目前上传4张表:上传工资信息  上传考勤 上传社保信息 人力资源月报表(人员增减 人员调动)
                if (fileExt == ".xls" || fileExt == ".xlsx")
                {
                    // 是excel 报表
                    #region Excel报表

                    if (getfilename.IndexOf("工资") > -1)
                    {
                        #region 工资信息 开始处理信息 和保存备份
                        #region 1.文件备份

                        // 检查文件是否存在
                        string SaveUrl = null;
                        bool CheckAndCreateAddress = BLL.XlsServes.CheckSaveFile(out SaveUrl);

                        if (CheckAndCreateAddress)
                        {
                            //存在
                            SaveUrl = SaveUrl + "\\" + getfilename.Trim() + Time.ToString() + fileExt;
                            if (File.Exists(SaveUrl))
                            {
                                //文件存在
                                //  DicMess["OK"] = "导入文件:" + Time + "月份" + getfilename + "已经保存";
                            }
                            else
                            {
                                //文件不存在
                                BLL.XlsServes.FileSaves(file, getfilename, fileExt, SaveUrl, Time);
                            }

                        }
                        #endregion
                        #region 2.保存生产工资的信息的部分 先读取excel 信息到表中,然后进行保存到数据库之中
                        // 第一页未工资的信息的部分
                        SaveProductionSalary(file, fileExt, Time, DicMess);

                        #endregion
                        #endregion
                    }
                    else if (getfilename.IndexOf("年金") > -1)
                    {
                        #region 考勤信息
                        #region 1.文件备份

                        // 检查文件是否存在
                        string SaveUrl = null;
                        bool CheckAndCreateAddress = BLL.XlsServes.CheckSaveFile(out SaveUrl);

                        if (CheckAndCreateAddress)
                        {
                            //存在
                            SaveUrl = SaveUrl + "\\" + getfilename.Trim() + Time.ToString() + fileExt;
                            if (File.Exists(SaveUrl))
                            {
                                //文件存在
                                DicMess["OK"] = "导入文件:" + Time + "月份" + getfilename + "已经保存";
                            }
                            else
                            {
                                //文件不存在
                                BLL.XlsServes.FileSaves(file, getfilename, fileExt, SaveUrl, Time);
                            }

                        }
                        #endregion

                        #endregion
                    }
                    else if (getfilename.IndexOf("水电费") > -1)
                    {
                        #region 社保
                        #region 1.文件备份

                        // 检查文件是否存在
                        string SaveUrl = null;
                        bool CheckAndCreateAddress = BLL.XlsServes.CheckSaveFile(out SaveUrl);

                        if (CheckAndCreateAddress)
                        {
                            //存在
                            SaveUrl = SaveUrl + "\\" + getfilename.Trim() + Time.ToString() + fileExt;
                            if (File.Exists(SaveUrl))
                            {
                                //文件存在
                                DicMess["OK"] = "导入文件:" + Time + "月份" + getfilename + "已经保存";
                            }
                            else
                            {
                                //文件不存在
                                BLL.XlsServes.FileSaves(file, getfilename, fileExt, SaveUrl, Time);
                            }

                        }
                        #endregion

                        #endregion
                    }

                    #endregion
                    #endregion
                }
                else
                {
                    DicMess["Err"] = "导入文件" + getfilename + "不是Excel请从新上传";
                    //不是excel 报表
                }
            }
            #endregion
            return DicMess;
        }
        #region 保存工资信息
        /// <summary>
        /// 保存生产工资信息
        /// </summary>
        public static void SaveProductionSalary(HttpPostedFileBase file, string fileExt, string Time, Dictionary<string, string> DicMess)
        {
            #region 保存信息 
            DataTable table = new DataTable();
            ISheet sheet;
            Models.SalaryModel salaryModel = new Models.SalaryModel();
            string filename = Path.GetFileName((file.FileName));
            #region MyRegion
            if (fileExt == ".xls")
            {
                HSSFWorkbook hssfwb = new HSSFWorkbook(file.InputStream);
                sheet = hssfwb.GetSheetAt(0);
            }
            else
            {
                XSSFWorkbook hssfwb = new XSSFWorkbook(file.InputStream);
                sheet = hssfwb.GetSheetAt(0);
            }
            try
            {
                IRow headerRow = sheet.GetRow(2);// 从第3行进行读取 索引未行数-1
                int cellCount = headerRow.LastCellNum;
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {

                    DataColumn column = new DataColumn(headerRow.GetCell(i).ToString());
                    table.Columns.Add(column);
                }
                int rowCount = sheet.LastRowNum;
                for (int i = 3; i < sheet.LastRowNum; i++)// 从第3行循环
                                                          // for (int i = (sheet.FirstRowNum); i < sheet.LastRowNum; i++)
                {
                    IRow row = sheet.GetRow(i);
                    DataRow dataRow = table.NewRow();

                    for (int j = row.FirstCellNum; j < cellCount; j++)
                    {
                        #region 判断类型
                        ICell RCells = row.GetCell(j);

                        if (RCells != null)
                        {
                            try
                            {
                                switch (RCells.CellType)  //注意按单元格格式分类取值
                                {
                                    case CellType.Numeric:    //用于取出数值和公式类型的数据 
                                        dataRow[j] = RCells.NumericCellValue;

                                        break;
                                    case CellType.Error:
                                        dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                        break;
                                    case CellType.Formula:
                                        switch (row.GetCell(j).CachedFormulaResultType)
                                        {
                                            case CellType.String:
                                                string strFORMULA = row.GetCell(j).StringCellValue;
                                                if (strFORMULA != null && strFORMULA.Length > 0)
                                                {
                                                    dataRow[j] = strFORMULA.ToString();
                                                }
                                                else
                                                {
                                                    dataRow[j] = null;
                                                }
                                                break;
                                            case CellType.Numeric:
                                                dataRow[j] = Convert.ToString(row.GetCell(j).NumericCellValue);
                                                break;
                                            case CellType.Boolean:
                                                dataRow[j] = Convert.ToString(row.GetCell(j).BooleanCellValue);
                                                break;
                                            case CellType.Error:
                                                dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                                break;
                                            default:
                                                dataRow[j] = "";
                                                break;
                                        }
                                        break;
                                    case CellType.Boolean:
                                        // Boolean type
                                        dataRow[j] = RCells.BooleanCellValue.ToString();
                                        break;

                                    case CellType.Blank:
                                        break;

                                    default:
                                        // String type
                                        dataRow[j] = RCells.StringCellValue.Trim();
                                        break;
                                }
                            }
                            catch (Exception e)
                            {


                            }
                        }
                        else { dataRow[j] = ""; }
                        #endregion
                    }

                    #region 将数据保存到对应的数据库之中 
                    string username = dataRow[3].ToString();
                    if (username != null && username.Length > 0)
                    {
                        //var SalaryMonthTime = DateTime.ParseExact(Time, "yyyy年MM月", null).ToString("yyyy-MM");
                        var SalaryMonthTime = DateTime.ParseExact(Time, "yyyy年MM月", null);
                        try
                        {
                            //查找当前月份的用户信息
                            bool CheckUserName = salaryModel.SalaryBaseInfoes.Any(n => n.UserSalaryStatus == 1 && n.UserName == username);
                            if (CheckUserName)
                            {
                                #region 进行数据的保存 Baseinfo 直接保存
                                var salaryBaseInfo = salaryModel.SalaryBaseInfoes.Where(n => n.UserSalaryStatus == 1 && n.UserName == username).FirstOrDefault();
                                //应为这部分是不确定可变的所以直接每月进行替换 基本 岗位 绩效 保密
                                salaryBaseInfo.Base_MinSalary = 2000;
                                int SalaryBaseInfoId = salaryBaseInfo.Id;// 获得需要的id

                                salaryBaseInfo.Base_StationCombinationSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[22]); //岗位工资合计
                                salaryBaseInfo.Base_Confidentiality_Salary = 0; //保密
                                salaryBaseInfo.Base_Achievement_FullSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[24]); //绩效
                                #region SalaryDetails 操作
                                bool CheckSalaryDetails = salaryModel.SalaryDetails.Any(n => n.SalaryBaseInfoId == SalaryBaseInfoId && n.SalaryMonth == SalaryMonthTime);
                                #endregion
                                if (CheckSalaryDetails)
                                {
                                    //找到了,有数据修改
                                    Models.SalaryDetail salaryDetail = salaryModel.SalaryDetails.Where(n => n.SalaryBaseInfoId == SalaryBaseInfoId && n.SalaryMonth == SalaryMonthTime).FirstOrDefault();
                                    salaryDetail.SalaryBaseInfoId = SalaryBaseInfoId;
                                    salaryDetail.SalaryMonth = SalaryMonthTime;
                                    salaryDetail.CreateTime = System.DateTime.Now;
                                    salaryDetail.SalaryType = "工资明细";
                                    salaryDetail.CreateSalaryStart = 0;
                                    salaryDetail.AgainSupplementSalary_One = BLL.CheckValues.CheckParseDecimeValues(dataRow[25]);//--其它补发工资
                                    salaryDetail.Base_Foot_Salary = BLL.CheckValues.CheckParseDecimeValues(dataRow[26]);//餐补 
                                    salaryDetail.OutWorkDay = BLL.CheckValues.CheckParseDecimeValues(dataRow[27]); // 考勤
                                    salaryDetail.ShouldSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[28]); // 应发工资  = 收入额 = 累计收入额度
                                    salaryDetail.FloatingRate = BLL.CheckValues.CheckParseDecimeValues(dataRow[29]);//浮动率


                                }
                                else
                                {
                                    //没找到,添加
                                    salaryModel.SalaryDetails.Add(new Models.SalaryDetail()
                                    {
                                        SalaryBaseInfoId = SalaryBaseInfoId,
                                        SalaryMonth = SalaryMonthTime,
                                        CreateTime = System.DateTime.Now,
                                        SalaryType = "工资明细",
                                        CreateSalaryStart = 0,
                                        AgainSupplementSalary_One = BLL.CheckValues.CheckParseDecimeValues(dataRow[25]),//--其它补发工资
                                        Base_Foot_Salary = BLL.CheckValues.CheckParseDecimeValues(dataRow[26]),//餐补 
                                        OutWorkDay = BLL.CheckValues.CheckParseDecimeValues(dataRow[27]), // 考勤
                                        ShouldSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[28]), // 应发工资  = 收入额 = 累计收入额度
                                        FloatingRate = BLL.CheckValues.CheckParseDecimeValues(dataRow[29]), //浮动率


                                    });
                                }
                                //没有detail的添加




                                salaryModel.SaveChanges();
                                #endregion
                            }
                            else
                            {
                                DicMess["OK"] += "生产工资中" + username + "用户没找到请在系统中添加用户";//没有找到此用户
                            }


                        }
                        catch (Exception e)
                        {
                            string err = e.Message.ToString();
                            DicMess["Err"] = "导入成功,循环出问题" + e.Message;

                        }


                    }
                    else { }

                    #endregion


                    table.Rows.Add(dataRow);
                }
            }
            catch (Exception e)
            {
                DicMess["Err"] += "保存信息发生错误" + e.Message;// 

            }
            #endregion





            #endregion
        }
        #endregion
        #endregion

        #region 保存初始化工资baseinfo薪酬明细
        public static Dictionary<string, string> SaveInitSalaryBaseInfoDetail(IEnumerable<HttpPostedFileBase> files)
        {
            #region 保存初始化工资信息
            Dictionary<string, string> DicMess = new Dictionary<string, string>();
            DicMess.Add("OK", "");
            DicMess.Add("Err", "");
            #region 逻辑处理部分
            foreach (var file in files)
            {
                string filename = Path.GetFileName((file.FileName));// 带物理路径的名称
                string getfilename = Path.GetFileNameWithoutExtension(file.FileName);//文件名称 
                string fileExt = Path.GetExtension(filename);// 后缀
                #region 根据后缀生命 文件类型
                if (fileExt == ".xls" || fileExt == ".xlsx")
                {
                    #region 1.文件备份 
                    string SaveUrl = null;
                    string Time = DateTime.Now.ToString("yyyy年MM月dd日");
                    bool CheckAndCreateAddress = BLL.XlsServes.CheckSaveFile(out SaveUrl); // 检查文件是否存在 
                    if (CheckAndCreateAddress)
                    {
                        //存在
                        SaveUrl = SaveUrl + "\\" + getfilename.Trim() + Time.ToString() + fileExt;
                        if (File.Exists(SaveUrl))
                        {
                            //文件存在
                            //  DicMess["OK"] = "导入文件:" + Time + "月份" + getfilename + "已经保存";
                        }
                        else
                        {
                            //文件不存在
                            BLL.XlsServes.FileSaves(file, getfilename, fileExt, SaveUrl, Time);
                        }

                    }
                    #endregion
                    #region 2.保存生产工资的信息的部分 先读取excel 信息到表中,然后进行保存到数据库之中
                    // 第一页未工资的信息的部分
                    SaveInitBaseInfo(file, fileExt, Time, DicMess);

                    #endregion
                    #endregion

                }
                else
                {
                    DicMess["Err"] = "导入文件" + getfilename + "不是Excel请从新上传";
                    //不是excel 报表
                }
            }
            #endregion
            return DicMess;
            #endregion
        }
        public static void SaveInitBaseInfo(HttpPostedFileBase file, string fileExt, string Time, Dictionary<string, string> DicMess)
        {
            #region 保存信息 
            DataTable table = new DataTable();
            ISheet sheet;
            Models.SalaryModel salaryModel = new Models.SalaryModel();
            string filename = Path.GetFileName((file.FileName));

            #region 获得需要的查询数据的部分信息
            Models.Comparative ExcelComparative = salaryModel.Comparatives.Where(n => n.ExcelName == "初始基数").FirstOrDefault();
            int ShellIndex = int.Parse(ExcelComparative.ExcelShell.ToString());//
            int ExcelRowIndex = int.Parse(ExcelComparative.ExcelRow.ToString());
            int ExcelCellIndex = int.Parse(ExcelComparative.ExcelCell.ToString());


            #endregion
            #region MyRegion
            if (fileExt == ".xls")
            {
                HSSFWorkbook hssfwb = new HSSFWorkbook(file.InputStream);
                sheet = hssfwb.GetSheetAt(ShellIndex);
            }
            else
            {
                XSSFWorkbook hssfwb = new XSSFWorkbook(file.InputStream);
                sheet = hssfwb.GetSheetAt(ShellIndex);
            }
            try
            {
                IRow headerRow = sheet.GetRow(ExcelRowIndex);// 从第3行进行读取  从第3行进行读取 索引未行数-1
                int cellCount = headerRow.LastCellNum;
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {

                    DataColumn column = new DataColumn(headerRow.GetCell(i).ToString());
                    table.Columns.Add(column);
                }
                int rowCount = sheet.LastRowNum;
                bool CheckJ = true;
                for (int i = ExcelRowIndex + 1; i < sheet.LastRowNum; i++)// 从第3+1行循环 有1列表头信息 从excel第1行1列到实际数据结束行 ExcelEndRowIndex
                                                                          // for (int i = (sheet.FirstRowNum); i < sheet.LastRowNum; i++)
                {
                    IRow row = sheet.GetRow(i);
                    DataRow dataRow = table.NewRow();

                    //for (int j = row.FirstCellNum; j < cellCount; j++)
                    for (int j = ExcelCellIndex; j < cellCount; j++)
                    {
                        #region 判断类型
                        ICell RCells = row.GetCell(j);

                        if (RCells != null)
                        {
                            try
                            {
                                switch (RCells.CellType)  //注意按单元格格式分类取值
                                {
                                    case CellType.Numeric:    //用于取出数值和公式类型的数据 
                                        if (DateUtil.IsCellDateFormatted(RCells)) { dataRow[j] = RCells.DateCellValue.ToString("yyyy/MM/dd"); }
                                        else { dataRow[j] = RCells.NumericCellValue; }


                                        break;
                                    case CellType.Error:
                                        dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                        break;
                                    case CellType.Formula:
                                        switch (row.GetCell(j).CachedFormulaResultType)
                                        {
                                            case CellType.String:
                                                string strFORMULA = row.GetCell(j).StringCellValue;
                                                if (strFORMULA != null && strFORMULA.Length > 0)
                                                {
                                                    dataRow[j] = strFORMULA.ToString();
                                                }
                                                else
                                                {
                                                    dataRow[j] = null;
                                                }
                                                break;
                                            case CellType.Numeric:
                                                dataRow[j] = Convert.ToString(row.GetCell(j).NumericCellValue);
                                                break;
                                            case CellType.Boolean:
                                                dataRow[j] = Convert.ToString(row.GetCell(j).BooleanCellValue);
                                                break;
                                            case CellType.Error:
                                                dataRow[j] = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                                break;
                                            default:
                                                dataRow[j] = "";
                                                break;
                                        }
                                        break;
                                    case CellType.Boolean:
                                        // Boolean type
                                        dataRow[j] = RCells.BooleanCellValue.ToString();
                                        break;

                                    case CellType.Blank:
                                        break;

                                    default:
                                        // String type
                                        dataRow[j] = RCells.StringCellValue.Trim();
                                        break;
                                }
                            }
                            catch (Exception e)
                            {


                            }
                        }
                        else { dataRow[j] = ""; }
                        #endregion
                    }

                    if (dataRow[0].ToString() == "2 劳务费")
                    {
                        CheckJ = false;
                    }
                    else { }

                    #region 将数据保存到对应的数据库之中 
                    string username = dataRow[5].ToString();
                    if (username != null && username.Length > 0)
                    {
                        //查找当前月份的用户信息
                        bool CheckUserName = salaryModel.SalaryBaseInfoes.Any(n => n.UserSalaryStatus == 1 && n.UserName == username);
                        if (CheckJ == false)
                        {
                            #region 劳务费部分
                            int c = 1;
                            try
                            {
                                if (CheckUserName)
                                {
                                    #region 进行保存劳务费用的部分
                                    var salaryBaseInfo = salaryModel.SalaryBaseInfoes.Where(n => n.UserSalaryStatus == 1 && n.UserName == username).FirstOrDefault();
                                    salaryBaseInfo.SalaryInType = "劳务费";
                                    salaryBaseInfo.OrganizationCode = BLL.CheckValues.CheckParseStringValues(dataRow[1]);//部门编码 
                                    salaryBaseInfo.GrantSalaryCode = BLL.CheckValues.CheckParseStringValues(dataRow[6]);//费用编码
                                    salaryBaseInfo.Department = BLL.CheckValues.CheckParseStringValues(dataRow[7]);//部门
 
                                    salaryBaseInfo.UserType = BLL.CheckValues.CheckParseStringValues(dataRow[8]);//人员类别
                                    salaryBaseInfo.IdentityTypeCard = BLL.CheckValues.CheckParseStringValues(dataRow[9]);//*证照号码
                                    salaryBaseInfo.BankAccount = BLL.CheckValues.CheckParseStringValues(dataRow[10]);//银行帐号
                                    salaryBaseInfo.Base_Entry_Time = BLL.CheckValues.CheckParseStringValues(dataRow[11]).ToString();//入职时间
                                    salaryBaseInfo.MonthServicesSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[12]);//入职时间

                                    #endregion
                                }
                                else
                                {
                                    if (username == "姓名") { }
                                    else
                                    {
                                        DicMess["OK"] += "" + username + "没在系统找到 ";//没有找到此用户
                                    }
                                }
                                salaryModel.SaveChanges();
                            }
                            catch (Exception e)
                            {
                                string err = e.Message.ToString();
                                DicMess["Err"] = "导入成功,劳务费部分 循环出问题" + e.Message;

                            }
                            #endregion
                        }
                        else
                        {
                            #region 工资部分
                            try
                            {

                                if (CheckUserName)
                                {
                                    #region 进行数据的保存 Baseinfo 直接保存到固定的baseinfo部分
                                    var salaryBaseInfo = salaryModel.SalaryBaseInfoes.Where(n => n.UserSalaryStatus == 1 && n.UserName == username).FirstOrDefault();

                                    int BaseInfoId = salaryBaseInfo.Id;
                                    salaryBaseInfo.SalaryInType = "工资明细";
                                    salaryBaseInfo.ContractType = BLL.CheckValues.CheckParseStringValues(dataRow[1]);//--合同类别
                                    salaryBaseInfo.HousingSalaryType = BLL.CheckValues.CheckParseStringValues(dataRow[2]);//--公积金类别(安泰环境 中智(上海))
                                    salaryBaseInfo.IsPractice = BLL.CheckValues.CheckParseStringValues(dataRow[3]);//是否实习/试用 
                                    salaryBaseInfo.OrganizationCode = BLL.CheckValues.CheckParseStringValues(dataRow[4]);//部门编码 
                                    salaryBaseInfo.GrantSalaryCode = BLL.CheckValues.CheckParseStringValues(dataRow[6]);//费用编码
                                    salaryBaseInfo.CostAttribution = BLL.CheckValues.CheckParseStringValues(dataRow[7]);//费用归集部门
                                    salaryBaseInfo.UserType = BLL.CheckValues.CheckParseStringValues(dataRow[8]);//人员类别
                                    salaryBaseInfo.IdentityTypeCard = BLL.CheckValues.CheckParseStringValues(dataRow[9]);//*证照号码
                                    salaryBaseInfo.BankAccount = BLL.CheckValues.CheckParseStringValues(dataRow[10]);//银行帐号
                                    salaryBaseInfo.Base_Entry_Time = BLL.CheckValues.CheckParseStringValues(dataRow[11]).ToString();//入职时间
                                    salaryBaseInfo.Base_MinSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[12]);// 基本工资  
                                    salaryBaseInfo.Base_StationCombinationSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[13]);// 岗位工资  
                                    salaryBaseInfo.Base_Confidentiality_Salary = BLL.CheckValues.CheckParseDecimeValues(dataRow[14]);// 保密补贴 	 
                                    salaryBaseInfo.Base_Achievement_FullSalary = BLL.CheckValues.CheckParseDecimeValues(dataRow[15]);//绩效工资


                                    #endregion

                                }
                                else
                                {
                                    if (username == "姓名") { }
                                    else
                                    {
                                        DicMess["OK"] += "" + username + "没在系统找到 ";//没有找到此用户
                                    }
                                }
                                salaryModel.SaveChanges();
                            }
                            catch (Exception e)
                            {

                                string err = e.Message.ToString();
                                DicMess["Err"] = "导入成功,工资部分循环出问题" + e.Message;

                            }

                            #endregion
                        }


                    }
                    else { }

                    #endregion


                    table.Rows.Add(dataRow);
                }
            }
            catch (Exception e)
            {
                DicMess["Err"] += "保存信息发生错误" + e.Message;// 

            }
            #endregion





            #endregion

        }

        #endregion
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值