using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Reflection; using System.Text; namespace CommonUtil.Excel { /// /// Excel工具类 /// public class ExcelUtil { /// /// 导出excel /// /// /// 数据源 /// 导出的列名 /// 导出的列 /// public static byte[] Output(List entitys, string[] title, List listcolum) { IWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("sheet"); ISheet sheet1 = workbook.CreateSheet("sheet1"); ISheet sheet2 = workbook.CreateSheet("sheet2"); IRow Title = null; IRow rows = null; Type entityType = entitys[0].GetType(); PropertyInfo[] entityProperties = entityType.GetProperties(); try { for (int i = 0; i <= entitys.Count; i++) { if (i == 0) { Title = sheet.CreateRow(0); for (int k = 1; k < title.Length + 1; k++) { Title.CreateCell(0).SetCellValue("序号"); Title.CreateCell(k).SetCellValue(title[k - 1]); } continue; } else { rows = sheet.CreateRow(i); object entity = entitys[i - 1]; for (int c = 0; c <= listcolum.Count - 1; c++) { for (int j = 1; j <= entityProperties.Length; j++) { if (entityProperties[j - 1].Name == listcolum[c]) { var dem = entityProperties[j - 1].GetValue(entity); rows.CreateCell(0).SetCellValue(i); rows.CreateCell(c + 1).SetCellValue(dem.ToString()); } } } } } } catch (Exception e) { throw e; } byte[] buffer = new byte[1024 * 2]; using (MemoryStream ms = new MemoryStream()) { workbook.Write(ms); buffer = ms.GetBuffer(); } return buffer; } /// /// 导入Excel /// /// /// 数据流 /// public static List InputExcel(Stream ms) where T : new() { List list = new List { }; ms.Seek(0, SeekOrigin.Begin); IWorkbook workbook = null; try { //xlsx workbook = new XSSFWorkbook(ms); } catch (Exception) { //xls workbook = new HSSFWorkbook(ms); } ISheet sheet = workbook.GetSheetAt(0); IRow cellNum = sheet.GetRow(0); var propertys = typeof(T).GetProperties(); string value = null; int num = cellNum.LastCellNum; for (int i = 0; i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); if (row == null) { continue; } var obj = new T(); for (int j = 0; j < num; j++) { //当输出类型属性个数小于文件列数时,跳出 if (propertys.Length - 1 < j) { break; } if (row.GetCell(j) == null) { continue; } value = row.GetCell(j).ToString(); string str = (propertys[j].PropertyType).FullName; if (str == "System.String") { propertys[j].SetValue(obj, value, null); } else if (str == "System.DateTime") { DateTime pdt = Convert.ToDateTime(value, CultureInfo.InvariantCulture); propertys[j].SetValue(obj, pdt, null); } else if (str == "System.Boolean") { bool pb = Convert.ToBoolean(value); propertys[j].SetValue(obj, pb, null); } else if (str == "System.Int16") { short pi16 = Convert.ToInt16(value); propertys[j].SetValue(obj, pi16, null); } else if (str == "System.Int32") { int pi32 = Convert.ToInt32(value); propertys[j].SetValue(obj, pi32, null); } else if (str == "System.Int64") { long pi64 = Convert.ToInt64(value); propertys[j].SetValue(obj, pi64, null); } else if (str == "System.Byte") { byte pb = Convert.ToByte(value); propertys[j].SetValue(obj, pb, null); } else { propertys[j].SetValue(obj, null, null); } } list.Add(obj); } return list; } /// /// 导入Excel /// /// /// /// /// public static List InputExcel(Stream ms, bool hasHeader = false) where T : new() { List list = new List { }; ms.Seek(0, SeekOrigin.Begin); IWorkbook workbook = null; try { //xlsx workbook = new XSSFWorkbook(ms); } catch (Exception) { //xls workbook = new HSSFWorkbook(ms); } ISheet sheet = workbook.GetSheetAt(0); IRow cellNum = sheet.GetRow(0); var propertys = typeof(T).GetProperties(); string value = null; int num = cellNum.LastCellNum; for (int i = 0; i <= sheet.LastRowNum; i++) { if (hasHeader && i == 0) { continue; } IRow row = sheet.GetRow(i); if (row == null || row.Cells.Count != num) { continue; } var obj = new T(); for (int j = 0; j < num; j++) { //当输出类型属性个数小于文件列数时,跳出 if (propertys.Length - 1 < j) { break; } value = row.GetCell(j).ToString(); string str = (propertys[j].PropertyType).FullName; if (str == "System.String") { propertys[j].SetValue(obj, value, null); } else if (str == "System.DateTime") { try { propertys[j].SetValue(obj, row.GetCell(j).DateCellValue, null); } catch (Exception e) { throw e; } } else if (str == "System.Boolean") { bool pb = Convert.ToBoolean(value); propertys[j].SetValue(obj, pb, null); } else if (str == "System.Int16") { short pi16 = Convert.ToInt16(value); propertys[j].SetValue(obj, pi16, null); } else if (str == "System.Int32") { int pi32 = Convert.ToInt32(value); propertys[j].SetValue(obj, pi32, null); } else if (str == "System.Int64") { long pi64 = Convert.ToInt64(value); propertys[j].SetValue(obj, pi64, null); } else if (str == "System.Byte") { byte pb = Convert.ToByte(value); propertys[j].SetValue(obj, pb, null); } else { propertys[j].SetValue(obj, null, null); } } list.Add(obj); } return list; } /// /// 导入csv /// /// /// 数据流 /// public static List InputCSV(Stream ms) where T : new() { List list = new List { }; ms.Seek(0, SeekOrigin.Begin); //Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); StreamReader sr = new StreamReader(ms, Encoding.GetEncoding("GB2312")); var propertys = typeof(T).GetProperties(); while (!sr.EndOfStream) { string[] values = sr.ReadLine().Split(','); var obj = new T(); for (int i = 0; i < values.Length; i++) { //当输出类型属性个数小于文件列数时,跳出 if (propertys.Length - 1 < i) { break; } string value = values[i].ToString(); string str = (propertys[i].PropertyType).FullName; if (str == "System.String") { propertys[i].SetValue(obj, value, null); } else if (str == "System.DateTime") { DateTime pdt = Convert.ToDateTime(value, CultureInfo.InvariantCulture); propertys[i].SetValue(obj, pdt, null); } else if (str == "System.Boolean") { bool pb = Convert.ToBoolean(value); propertys[i].SetValue(obj, pb, null); } else if (str == "System.Int16") { short pi16 = Convert.ToInt16(value); propertys[i].SetValue(obj, pi16, null); } else if (str == "System.Int32") { int pi32 = Convert.ToInt32(value); propertys[i].SetValue(obj, pi32, null); } else if (str == "System.Int64") { long pi64 = Convert.ToInt64(value); propertys[i].SetValue(obj, pi64, null); } else if (str == "System.Byte") { byte pb = Convert.ToByte(value); propertys[i].SetValue(obj, pb, null); } else { propertys[i].SetValue(obj, null, null); } } list.Add(obj); } return list; } } }