Utilities
using Newtonsoft.Json; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Reflection; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace AZ.EPricing.Utility { public static class Utilities { /// <summary> /// DataTable 转成 T /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <returns></returns> public static T FillModel<T>(DataTable dt) where T : new() { if (dt == null || dt.Rows.Count < 1) // 判断ds的null和是否包含数据 { return new T(); } T model = new T(); PropertyInfo[] propertys = model.GetType().GetProperties(); // 获得此模型的公共属性 foreach (PropertyInfo pi in propertys) // 遍历该对象的所有属性 { if (dt.Columns.Contains(pi.Name)) // 检查DataTable是否包含此列(列名==对象的属性名) { object value = dt.Rows[0][pi.Name]; // 取值 if (value != DBNull.Value) // 如果非空,则赋给对象的属性 { pi.SetValue(model, value, null); } } } return model; } /// <summary> /// DataTable 转成List<T> /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <returns></returns> public static List<T> FillModelList<T>(DataTable dt) where T : new() { if (dt == null || dt.Rows.Count < 1) // 判断ds的null和是否包含数据 { return null; } List<T> list = new List<T>(); foreach (DataRow dr in dt.Rows) { T model = new T(); PropertyInfo[] propertys = model.GetType().GetProperties(); // 获得此模型的公共属性 foreach (PropertyInfo pi in propertys) // 遍历该对象的所有属性 { if (dt.Columns.Contains(pi.Name)) // 检查DataTable是否包含此列(列名==对象的属性名) { object value = dr[pi.Name]; // 取值 if (value != DBNull.Value) // 如果非空,则赋给对象的属性 { pi.SetValue(model, value, null); } } } list.Add(model); } return list; } /// <summary> /// 根据DataTable导出Excel到内存 /// </summary> /// <param name="ds"></param> /// <returns></returns> public static MemoryStream Export1(DataTable dtSource, string pathFile) { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet(); HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle(); HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat(); dateStyle.DataFormat = format.GetFormat("dd/mm/yyyy");//yyyy-mm-dd dateStyle.Alignment = HorizontalAlignment.Center; dateStyle.BorderBottom = BorderStyle.Thin; dateStyle.BorderLeft = BorderStyle.Thin; dateStyle.BorderRight = BorderStyle.Thin; dateStyle.BorderTop = BorderStyle.Thin; HSSFCellStyle tdStyle = (HSSFCellStyle)workbook.CreateCellStyle(); tdStyle.Alignment = HorizontalAlignment.Center; tdStyle.BorderBottom = BorderStyle.Thin; tdStyle.BorderLeft = BorderStyle.Thin; tdStyle.BorderRight = BorderStyle.Thin; tdStyle.BorderTop = BorderStyle.Thin; //取得列宽 int[] arrColWidth = new int[dtSource.Columns.Count]; foreach (DataColumn item in dtSource.Columns) { arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length; } int rowIndex = 0; foreach (DataRow row in dtSource.Rows) { #region 新建表,填充表头,填充列头,样式 if (rowIndex == 65535 || rowIndex == 0) { if (rowIndex != 0) { sheet = (HSSFSheet)workbook.CreateSheet(); } #region 列头及样式 { HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0); HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle(); headStyle.Alignment = HorizontalAlignment.Center; HSSFFont font = (HSSFFont)workbook.CreateFont(); headStyle.BorderBottom = BorderStyle.Thin; headStyle.BorderLeft = BorderStyle.Thin; headStyle.BorderRight = BorderStyle.Thin; headStyle.BorderTop = BorderStyle.Thin; font.FontHeightInPoints = 10; font.Boldweight = 700; headStyle.SetFont(font); foreach (DataColumn column in dtSource.Columns) { headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); headerRow.GetCell(column.Ordinal).CellStyle = headStyle; //设置列宽 sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256); } } #endregion rowIndex = 1; } #endregion #region 填充内容 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex); foreach (DataColumn column in dtSource.Columns) { HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Ordinal); newCell.CellStyle = tdStyle; string drValue = row[column].ToString(); switch (column.DataType.ToString()) { case "System.String"://字符串类型 newCell.SetCellValue(drValue); break; case "System.DateTime"://日期类型 DateTime dateV; DateTime.TryParse(drValue, out dateV); if (drValue != "") { newCell.SetCellValue(dateV); newCell.CellStyle = tdStyle; newCell.CellStyle = dateStyle;//格式化时间显示 } else { newCell.SetCellValue(drValue); } break; case "System.Boolean"://布尔型 bool boolV = false; bool.TryParse(drValue, out boolV); newCell.SetCellValue(boolV); break; case "System.Int16": case "System.Int32": case "System.Int64": case "System.Byte": int intV = 0; int.TryParse(drValue, out intV); newCell.SetCellValue(intV); newCell.CellStyle = tdStyle;//cqz添加 break; case "System.Decimal"://浮点型 case "System.Double": double doubV = 0; double.TryParse(drValue, out doubV); newCell.SetCellValue(doubV); break; case "System.DBNull"://空值处理 newCell.SetCellValue(""); break; default: newCell.SetCellValue(""); newCell.CellStyle = tdStyle;//cqz添加 break; } } #endregion rowIndex++; } using (MemoryStream ms = new MemoryStream()) { workbook.Write(ms); ms.Flush(); ms.Position = 0; return ms; } } /// <summary> /// DataTable导出到Excel文件 /// </summary> /// <param name="dtSource">源DataTable</param> /// <param name="strFileName">保存位置</param> public static void Export(DataTable dtSource, string strFileName) { using (MemoryStream ms = Export1(dtSource, strFileName)) { using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write)) { byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); fs.Close(); fs.Dispose(); } } } #region JsonHelper /// <summary> /// 将对象序列化为JSON格式 /// </summary> /// <param name="o">对象</param> /// <returns>json字符串</returns> public static string SerializeObject(object o) { string json = JsonConvert.SerializeObject(o); return json; } /// <summary> /// 解析JSON字符串生成对象实体 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param> /// <returns>对象实体</returns> public static T DeserializeJsonToObject<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); T t = o as T; return t; } /// <summary> /// 解析JSON数组生成对象实体集合 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param> /// <returns>对象实体集合</returns> public static List<T> DeserializeJsonToList<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>)); List<T> list = o as List<T>; return list; } /// <summary> /// 反序列化JSON到给定的匿名对象. /// </summary> /// <typeparam name="T">匿名对象类型</typeparam> /// <param name="json">json字符串</param> /// <param name="anonymousTypeObject">匿名对象</param> /// <returns>匿名对象</returns> public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject) { T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); return t; } #endregion #region AES加密解密 public static string AesEncrypt(string encryptStr) { string AESKey = "epricing@163epricing216@epricing";//长度32位 string AESIV = "@816epricing816@";//长度16位 byte[] keyArray = UTF8Encoding.UTF8.GetBytes(AESKey); byte[] ivArray = UTF8Encoding.UTF8.GetBytes(AESIV); byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(encryptStr); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.IV = ivArray; rDel.Mode = CipherMode.CBC; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } public static string AesDecrypt(string decryptStr) { string AESKey = "epricing@163epricing216@epricing";//长度32位 string AESIV = "@816epricing816@";//长度16位 byte[] keyArray = UTF8Encoding.UTF8.GetBytes(AESKey); byte[] ivArray = UTF8Encoding.UTF8.GetBytes(AESIV); byte[] toEncryptArray = Convert.FromBase64String(decryptStr); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.IV = ivArray; rDel.Mode = CipherMode.CBC; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); string conn = UTF8Encoding.UTF8.GetString(resultArray); return conn; } #endregion } }