コード例 #1
0
ファイル: BaseEntityData.cs プロジェクト: whw0828/EPASServer
        public List <T> ExcelDataToEntityList(string filePath, string sheetName, Dictionary <string, ExcelFieldParam> ncMap)
        {
            Dictionary <int, string> ncMapIndex = new Dictionary <int, string>();


            DataTable dtImport = ExcelHelper.ReadExcelFileToDataTable(filePath, sheetName, true);

            int rowCount   = dtImport.Rows.Count;
            int columCount = dtImport.Columns.Count;

            string tableName   = ObjectHelper.GetEntityName <T>();
            string fieldIDName = tableName + BusinessHelper.EPASID;//表主键名称

            for (int colum = 0; colum < columCount; colum++)
            {
                string columName = dtImport.Columns[colum].Caption;
                if (ncMap.ContainsKey(columName))
                {
                    ncMapIndex.Add(colum, columName);
                }
            }

            List <T> itemList = new List <T>();

            for (int row = 0; row < rowCount; row++)
            {
                T item = System.Activator.CreateInstance <T>();
                //给实体类中主键赋值
                ObjectHelper.SetObjectValueByFieldName <T>(item, fieldIDName, Guid.NewGuid().ToString());

                for (int colum = 0; colum < columCount; colum++)
                {
                    if (ncMapIndex.ContainsKey(colum))
                    {
                        string displayName = ncMapIndex[colum];
                        string fieldName   = ncMap[displayName].ExcelFieldName;

                        object value = dtImport.Rows[row][colum];

                        //需要换算
                        if (ncMap[displayName].IsTrans == CustomEnable.Enable)
                        {
                            Type type = Type.GetType(ncMap[displayName].ClassName);//获取类 ""里为 命名空间.类名

                            if (ncMap[displayName].TransType == ExcelTransType.EnumTrans)
                            {
                                //枚举换算
                                Dictionary <string, int> enumMap = EnumAttribute.GetEnumFields(type);

                                if (enumMap.ContainsKey(value.ToString()))
                                {
                                    value = enumMap[value.ToString()];
                                }
                            }
                            else if (ncMap[displayName].TransType == ExcelTransType.EntityTrans)
                            {
                                //实体换算

                                List <string> strList = GetTransEntityByField <string>(ncMap[displayName].TransFieldName,
                                                                                       ncMap[displayName].ExcelFieldName, value.ToString(), ncMap[displayName].ClassName);

                                if (strList != null && strList.Count > 0)
                                {
                                    value = strList.FirstOrDefault();
                                }

                                fieldName = ncMap[displayName].TransFieldName;
                            }
                        }

                        ObjectHelper.SetObjectValueByFieldName <T>(item, fieldName, value);
                    }
                }

                itemList.Add(item);
            }

            return(itemList);
        }