在ASP.NET MVC5中将图表导出到Excel

时间:2015-09-21 21:06:18

标签: c# asp.net excel

我试图将数据和图表从我的ASP.net项目导出到Excel,我使用下面的代码,但我没有成功在Excel文件中显示图表我只看到文本

aCallOut

1 个答案:

答案 0 :(得分:0)

通常我们不需要overkill / high fat库,而是致命的简单库/辅助类解决了我们的问题

我找到了一个生成Excel 2007+文件from here的帮助程序类,并添加了一些扩展方法,用于将List数据转换为DataTable。

虽然它的文档有,但需要总结一下:

  • 取消注释第一行用于MVC / ASP.net项目。
  • 该课程在#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" />