private const int OLDOFFICEVESION = -4143;
private const int NEWOFFICEVESION = 56;
/// <summary>
/// 使用 Excel.dll 导出 Excel
/// </summary>
/// <param name="list">数据</param>
/// <param name="filename">名称</param>
/// <param name="ColumNames">标题名(数组-所有标题)</param>
/// <param name="FileNames">标题名对应的数据库字段名称(数组-标题对应字段)</param>
public void InteropToExcel<T>(IList<T> list, string filename, string[] ColumNames, string[] FileNames)
{
PropertyInfo[] propertyInfos = list.First().GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
//保存excel文件的格式
int FormatNum;
//excel版本号
string Version;
Application xlApp = new Application();
Workbooks workbooks = xlApp.Workbooks;
//创建文件
Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
//创建sheet
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
//这里是 Excel 表格中 第一行第一列的位置是[1,1] 不是 [0,0]
// 设置Excel 表格中 第一行的标题 字体居中
for (int i = 0; i < ColumNames.Length; i++)
{
worksheet.Cells[1, i + 1] = ColumNames[i];
((Range)worksheet.Cells[1, i + 1]).HorizontalAlignment = XlVAlign.xlVAlignCenter;
}
foreach(T item in list)
{
if (list == null)
{
return;
}
for (int i = 0; i < FileNames.Length; i++)
{
for (int j = 0; j < propertyInfos.Length; j++)
{
PropertyInfo pi = propertyInfos[i];
if(pi.Name == FileNames[i])
{
worksheet.Cells[i + 2, i + 1] = pi.GetValue(item, null).ToString();
}
}
}
}
//添加内容
worksheet.StandardWidth = 15d; // 设置宽度
//获取你使用的excel 的版本号
Version = xlApp.Version;
//使用Excel 97-2003
if (Convert.ToDouble(Version) < 12)
{
FormatNum = OLDOFFICEVESION;
}
//使用 excel 2007或更新
else
{
FormatNum = NEWOFFICEVESION;
}
//保存,这里必须指定FormatNum文件的格式,否则无法打开创建的excel文件
workbook.SaveAs(filename, FormatNum);
//显示创建的excel文件
xlApp.Visible = true;
}