大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换
//EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls格式
/* ============================================================================== * 功能描述:EppHelper * 创 建 者:蒲奎民 * 创建日期:2016-07-21 14:30:35 * CLR Version :4.0.30319.42000 * ==============================================================================*/ using OfficeOpenXml; using OfficeOpenXml.Style; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using YCF.HRMS.Utilities.ExceptionHeper; using YCF.HRMS.Utilities.ExtensionHelper; /* * 引用文件: * packagesEPPlus.4.1.0lib et40EPPlus.dll * packagesEPPlus.Extensions.1.0.0.0lib et40EPPlus.Extensions.dll */ namespace YCF.HRMS.Utilities.CommomHelper { /// <summary> /// EpPlus读取Excel帮助类+读取csv帮助类 /// </summary> public class EppHelper { #region 由List创建简单Exel.列头取字段的Description或字段名 /// <summary> /// 由List创建简单Exel.列头取字段的Description或字段名 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="filePath">The file path.</param> /// <param name="dataList">The data list.</param> public static void CreateExcelByList<T>(string filePath, List<T> dataList) where T : class { string dirPath = Path.GetDirectoryName(filePath); string fileName = Path.GetFileName(filePath); FileInfo newFile = new FileInfo(filePath); if (newFile.Exists) { newFile.Delete(); // ensures we create a new workbook newFile = new FileInfo(filePath); } PropertyInfo[] properties = null; if (dataList.Count > 0) { Type type = dataList[0].GetType(); properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); var filedDescriptions = CommonFunctions.GetPropertyDescriptions<T>(true);//字段与excel列名对应关系 using (ExcelPackage package = new ExcelPackage(newFile)) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("sheet1"); //设置表头单元格格式 using (var range = worksheet.Cells[1, 1, 1, properties.Length]) { range.Style.Font.Bold = true; range.Style.Fill.PatternType = ExcelFillStyle.Solid; range.Style.Fill.BackgroundColor.SetColor(Color.DarkBlue); range.Style.Font.Color.SetColor(Color.White); } int row = 1, col; object objColValue; string colValue; //表头 for (int j = 0; j < properties.Length; j++) { row = 1; col = j + 1; var description = filedDescriptions.Where(o => o.Key == properties[j].Name).Select(o => o.Value).FirstOrDefault(); worksheet.Cells[row, col].Value = (description == null || description.Description.IsNullOrEmpty()) ? properties[j].Name : description.Description; } worksheet.View.FreezePanes(row + 1, 1); //冻结表头 //各行数据 for (int i = 0; i < dataList.Count; i++) { row = i + 2; for (int j = 0; j < properties.Length; j++) { col = j + 1; objColValue = properties[j].GetValue(dataList[i], null); colValue = objColValue == null ? "" : objColValue.ToString(); worksheet.Cells[row, col].Value = colValue; } } package.Save(); } } } #endregion #region 读取Excel数据到DataSet /// <summary> /// 读取Excel数据到DataSet /// </summary> /// <param name="filePath">The file path.</param> /// <returns></returns> public static DataSet ReadExcelToDataSet(string filePath) { DataSet ds = new DataSet("ds"); DataRow dr; object objCellValue; string cellValue; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite)) using (ExcelPackage package = new ExcelPackage()) { package.Load(fs); foreach (var sheet in package.Workbook.Worksheets) { if (sheet.Dimension == null) continue; var columnCount = sheet.Dimension.End.Column; var rowCount = sheet.Dimension.End.Row; if (rowCount > 0) { DataTable dt = new DataTable(sheet.Name); for (int j = 0; j < columnCount; j++)//设置DataTable列名 { objCellValue = sheet.Cells[1, j + 1].Value; cellValue = objCellValue == null ? "" : objCellValue.ToString(); dt.Columns.Add(cellValue, typeof(string)); } for (int i = 2; i <= rowCount; i++) { &nbs