c# list<object>的数据怎么导出到excel 10
如图代码,最终返回list<object>,是ef框架的linq语句。我现在想导出到excel。请问该怎么实现?不要告诉我说写个for循环,多行多列给excel赋值,这让...
如图代码,最终返回list<object>,是ef框架的linq语句。我现在想导出到excel。请问该怎么实现?不要告诉我说写个for循环,多行多列给excel赋值,这让我感觉代码很差,可移植性更差,最好有个能直接转成datatable,或者直接导出的
展开
2个回答
展开全部
/// <summary>
///将list泛型数组转换成datatable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="header"></param>
/// <returns></returns>
public static DataTable ListToDataTable<T>(List<T> list, string header)
{
string[] arrHeader = header.Split(',');
DataTable dt = new DataTable();
DataRow dr;
Boolean columnHeader = true;
foreach (T t in list)
{
Type ut = t.GetType();
PropertyInfo[] plist = ut.GetProperties();
dr = dt.NewRow();
foreach (var arr in arrHeader)
{
var name = arr.Split(':')[0];
var key = arr.Split(':')[1];
var isExist = plist.Where(w => w.Name == name).FirstOrDefault();
if (isExist == null) continue;
//填充列头
if (columnHeader)
{
if (!dt.Columns.Contains(key))
{
dt.Columns.Add(key);
}
}
Object value = ut.GetProperty(isExist.Name).GetValue(t, null);
dr[key] = value == null ? "" : value.ToString();
}
dt.Rows.Add(dr);
if (columnHeader)
{
columnHeader = false;
}
}
return dt;
}
///将list泛型数组转换成datatable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="header"></param>
/// <returns></returns>
public static DataTable ListToDataTable<T>(List<T> list, string header)
{
string[] arrHeader = header.Split(',');
DataTable dt = new DataTable();
DataRow dr;
Boolean columnHeader = true;
foreach (T t in list)
{
Type ut = t.GetType();
PropertyInfo[] plist = ut.GetProperties();
dr = dt.NewRow();
foreach (var arr in arrHeader)
{
var name = arr.Split(':')[0];
var key = arr.Split(':')[1];
var isExist = plist.Where(w => w.Name == name).FirstOrDefault();
if (isExist == null) continue;
//填充列头
if (columnHeader)
{
if (!dt.Columns.Contains(key))
{
dt.Columns.Add(key);
}
}
Object value = ut.GetProperty(isExist.Name).GetValue(t, null);
dr[key] = value == null ? "" : value.ToString();
}
dt.Rows.Add(dr);
if (columnHeader)
{
columnHeader = false;
}
}
return dt;
}
追问
我list里面是object的类型的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把list转换成datatable,然后用Spire导入,很简单,代码就几行:
//创建一个Excel文档
Workbook workbook = new Workbook();
//获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
//将datatable导入到工作表,数据从工作表的第一行第一列开始写入
sheet.InsertDataTable(datatable, true, 1, 1);
//保存文档
workbook.SaveToFile("ImportToExcel.xlsx",ExcelVersion.Version2013);
代码是从这篇文章拷过来的:C# Excel数据导入和导出简单方案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询