using System; using System.Collections.Generic; using System.Data; using UnityEngine; using System.IO; using ExcelDataReader; using System.Reflection; using OfficeOpenXml; /// /// Excel帮助类 /// public class ExcelHelper { /// /// 从Excel文件读取信息 /// /// 文件路径名(需要有文件后缀) /// 表头 /// public static List ReadInfoFromExcel(string filedPath, int headCount) { List tmpTs = new List(); using (FileStream fileStream = File.Open(filedPath, FileMode.Open, FileAccess.Read)) { using (IExcelDataReader dataReader = ExcelReaderFactory.CreateReader(fileStream)) { //拿Excel第一张表 DataTable tmpDataTable = dataReader.AsDataSet().Tables[0]; //类中变量 FieldInfo[] tmpFileInfos = typeof(T).GetFields(); //匹配数据 if (tmpFileInfos.Length != tmpDataTable.Columns.Count) { Debug.LogError($"转换数据与{filedPath}的元素数量不相同,请检查!!!"); return tmpTs; } for (int i = headCount; i < tmpDataTable.Rows.Count; i++) { T tmpT = Activator.CreateInstance(); for (int j = 0; j < tmpFileInfos.Length; j++) { FieldInfo tmpFieldInfo = tmpFileInfos[j]; tmpFieldInfo.SetValue(tmpT, tmpDataTable.Rows[i][j].ToString()); } tmpTs.Add(tmpT); } } } return tmpTs; } /// /// 将数据信息写入到Excel文件中 /// /// 类型 /// 信息 /// 全路径+后缀 public static bool WriteInfoToExcel(string filePath, List ts) { using (ExcelPackage package = new ExcelPackage()) { if (package.Workbook.Worksheets.Count == 0) package.Workbook.Worksheets.Add("Sheet1"); ExcelWorksheet sheet = package.Workbook.Worksheets["Sheet1"]; FieldInfo[] tmpFieldInfos = typeof(T).GetFields(); //写入标题 for (int i = 1; i < tmpFieldInfos.Length + 1; i++) sheet.Cells[1, i].Value = tmpFieldInfos[i -1].Name; //写入数据 for (int i = 2; i < ts.Count + 2; i++) { for (int j = 1; j < tmpFieldInfos.Length + 1; j++) { sheet.Cells[i, j].Value = tmpFieldInfos[j - 1].GetValue(ts[i - 2]); } } FileInfo tmpFileInfo = new FileInfo(filePath); //如果不存在表格就创建表格 if (!tmpFileInfo.Exists) tmpFileInfo.Create().Dispose(); package.SaveAs(tmpFileInfo); } return false; } }