【发布时间】:2014-09-01 10:11:47
【问题描述】:
我正在尝试使用以下代码生成 Excel 文件:
public static Stream GenerateFileFromClass<T>(IEnumerable<T> collection, int startrow, int startcolumn, byte[]templateResource)
{
using (Stream template = new MemoryStream(templateResource))//this is an excel file I am using for a base/template
{
using (var tmpl = new ExcelPackage(template))
{
ExcelWorkbook wb = tmpl.Workbook;
if (wb != null)
{
if (wb.Worksheets.Count > 0)
{
ExcelWorksheet ws = wb.Worksheets.First();
ws.Cells[startrow, startcolumn].LoadFromCollection<T>(collection, false);
}
return new MemoryStream(tmpl.GetAsByteArray());
}
else
{
throw new ArgumentException("Unable to load template WorkBook");
}
}
}
}
然而,这就像一种享受。我想忽略我的类集合中的几个属性,所以它与我的模板相匹配。我知道LoadFromCollection 将根据类的公共属性在 Excel 文件中生成列,但是当我使用实体框架加载类时,如果我将该字段标记为私有,则 EF 会抱怨 - 主要是因为其中之一我不想显示的字段是 Key。
我尝试使用[XmlIgnore] 标记我不想使用的属性,但无济于事。有没有办法做到这一点,除了将整个集合加载到数据集或一些类似的数据集中并从中修剪列?或者转换为没有我不需要的属性的基类?
【问题讨论】:
-
你不能使用像 AutoMapper 或自定义映射到另一个 POCO 的东西,它只有所需的属性,然后将新的对象集合传递给 epplus,而不是 EF 集合
标签: c# excel entity-framework-6 epplus