通过泛型设计的一个类用于不同自定义类的泛型集合导出到Excel通用方法用到EEPULUS第三方类库注意版本不要太高(麻烦),我用4.5.3.3
using OfficeOpenXml;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace Common
{
public class ExcelExportByGeneric<T>//泛型类 参数是类型T 不指定 实例化时指定 影响下面的List<T>
{
public void ExportToExcel(List<T> list, string filePath)//引用泛型
{
//ExcelPackage.LicenseContext = LicenseContext.NonCommercial; //高版本需要 设置许可证上下文,如果是商业用途请更换为 LicenseContext.Commercial
using (var package = new ExcelPackage()) // 创建一个ExcelPackage实例
{
var worksheet = package.Workbook.Worksheets.Add("Data"); // 添加一个工作表
int row = 1; // 用于追踪行号
// 获取所有公共属性,这将作为列标题***消化不好这条反射就记住它吧, 但有时间还是好好看看反射的内容
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
int col = 1; // 用于追踪列号
foreach (PropertyInfo prop in props)
{
worksheet.Cells[row, col].Value = prop.Name; // 设置列标题
col++;
}
row++; // 移动到下一行,准备写入数据
// 写入数据行
foreach (T t in list)
{
col = 1; // 重置列号到第一列
foreach (PropertyInfo prop in props)
{
var value = prop.GetValue(t, null); // 获取属性的值
worksheet.Cells[row, col].Value = value; // 设置单元格的值
col++;
}
row++; // 移动到下一行,准备写入下一行数据
}
// 自适应列宽以更好地显示内容
worksheet.Cells.AutoFitColumns();
// 保存Excel文件到指定路径
FileInfo fileInfo = new FileInfo(filePath);
package.SaveAs(fileInfo); // 保存文件
}
}
}
}
调用
UserInfoBLL bll = new UserInfoBLL();
List<UserInfo> list = bll.GetUserInfoList();
//--始
string fileName=Guid.NewGuid().ToString()+".xlsx";
string filePath = @".\Excel\" + fileName;
ExcelExporter<UserInfo> ee = new ExcelExporter<UserInfo>();
ee.ExportToExcel(list, filePath);

浙公网安备 33010602011771号