【发布时间】:2017-11-27 12:23:29
【问题描述】:
当用户单击按钮时,我正在尝试从控制器导出 .xlsx 文档。我的模型如下所示:
public class ExportOrdersViewModel
{
public int Id { get; set; }
public string CustomerFirstName { get; set; }
public string CustomerLastName { get; set; }
public string CustomerEmail { get; set; }
public string CustomerMobile { get; set; }
public string ShippingStreet { get; set; }
public string ShippingCity { get; set; }
public string ShippingCountry { get; set; }
public string ShippingPostalCode { get; set; }
public string ShippingTo { get; set; }
public bool IsShipped { get; set; }
public ICollection<ExportOrdersItemViewModel> Items { get; set; }
}
public class ExportOrdersItemViewModel
{
public string TicketName { get; set; }
public string EventName { get; set; }
public int Quantity { get; set; }
public string CurrencyId { get; set; }
public string PaymentCurrencyId { get; set; }
public string UnitPrice { get; set; }
public string PaymentUnitPrice { get; set; }
}
除了字符串属性,ExportOrdersViewModel 还包含一个项目列表。创建文件后,我想在创建行时在单元格中显示此列表。
我正在使用 ClosedXML 来创建文件。在创建文件之前,我在控制器中创建了一个包含所有 ExportOrdersViewModel 属性的 DataTable 和一个引用另一个 DataTable 的行,该 DataTable 包含 ExportOrdersItemViewModel 的属性。父数据表在此之后传递给工作簿。
在这里你可以看到我是如何做到的:
DataTable orders = new DataTable();
orders.Columns.Add("OrderID", typeof(string));
orders.Columns.Add("Items", typeof(DataTable));
orders.Columns.Add("IsShipped", typeof(bool));
DataTable items = new DataTable();
items.Columns.Add("TicketName", typeof(string));
items.Columns.Add("Quantity", typeof(int));
items.Columns.Add("Currency", typeof(string));
exportModels.ForEach(o => orders.Rows.Add(
o.Id,
(DataTable)GetItems(o.Items),
o.IsShipped
));
当我在调试模式下检查订单数据表时,它包含对相应项目数据表的引用,但是当我传递给工作簿时,文件项目行是空的。
这是我创建文件的方式:
XLWorkbook workbook = new XLWorkbook();
workbook.Worksheets.Add(orders, "Orders");
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=\"HelloWorld.xlsx\"");
using (MemoryStream memoryStream = new MemoryStream())
{
workbook.SaveAs(memoryStream);
memoryStream.WriteTo(Response.OutputStream);
memoryStream.Close();
}
Response.End();
我想让它看起来像这样:https://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/linqParentChild_615EF617.jpg
【问题讨论】:
-
aspblogs.blob.core.windows.net/media/muhanadyounis/Media/… 是 Excel 的截图吗?看起来不像。
-
不是。我只是想让它看起来像那样
-
在 Excel 中不可能。
标签: .net model-view-controller datatable export-to-excel closedxml