我试图将数据和图表从我的ASP.net项目导出到Excel,我使用下面的代码,但我没有成功在Excel文件中显示图表我只看到文本
aCallOut
答案 0 :(得分:0)
通常我们不需要overkill / high fat库,而是致命的简单库/辅助类解决了我们的问题
我找到了一个生成Excel 2007+文件from here的帮助程序类,并添加了一些扩展方法,用于将List
数据转换为DataTable。
虽然它的文档有,但需要总结一下:
该课程在#region HELPER_FUNCTIONS
public static DataTable ListToDataTable<T>(List<T> list)
但是我使用另一个解决方案,这是一种从Internet ToDataTable
public static DataTable ToDataTable<T>(this List<T> list)
// ExtensionMethods.cs
static public class ExtensionMethods
{
public static DataSet ToDataSet<T>(this IEnumerable<T> data)
{
DataSet ds = new DataSet();
ds.Tables.Add(data.ToDataTable());
return ds;
}
public static DataTable ToDataTable<T>(this List<T> list)
{
DataTable dt = new DataTable();
foreach (PropertyInfo info in typeof(T).GetProperties())
{
dt.Columns.Add(new DataColumn(info.Name, GetNullableType(info.PropertyType)));
}
foreach (T t in list)
{
DataRow row = dt.NewRow();
foreach (PropertyInfo info in typeof(T).GetProperties())
{
if (!IsNullableType(info.PropertyType))
row[info.Name] = info.GetValue(t, null);
else
row[info.Name] = (info.GetValue(t, null) ?? DBNull.Value);
}
dt.Rows.Add(row);
}
return dt;
}
private static Type GetNullableType(Type t)
{
Type returnType = t;
if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
returnType = Nullable.GetUnderlyingType(t);
}
return returnType;
}
private static bool IsNullableType(Type type)
{
return (type == typeof(string) ||
type.IsArray ||
(type.IsGenericType &&
type.GetGenericTypeDefinition().Equals(typeof(Nullable<>))));
}
}
最后用法很简单将此代码放入Controller
public void ExportToExcel()
{
using (var db = new EFDbContext())
{
var data = FetchDataAsList<MyDbEntityOrMvcModel>().ToDataTable();
CreateExcelFile.CreateExcelDocument(data, "report.xlsx", System.Web.HttpContext.Current.Response);
}
}
请注意我使用System.Web.HttpContext.Current.Response
HttpContext.Current.Response
从视图中调用您的操作
<a href="@Url.Action("GridExportToExcel", new { filter = Model.Filter})" class="fa fa-file-excel-o" />