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;
}
}