ユーザーがボタンをクリックしたときに、コントローラから.xlsxドキュメントをエクスポートしようとしています。私のモデルは次のようになります。.NETエクスポートをExcelにエクスポートする - リストのプロパティが表示されない
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と、ExportOrdersItemViewModelのプロパティを含む別のDataTableを参照する行が作成されました。 Parrent DataTableは、これを受けてブックに渡されます。ここで
あなたは、私はそれをやっている方法を参照してくださいすることができます
私は注文のDataTableが、それは対応する項目のDataTableへの参照が含まれているデバッグモードで確認してください、私は合格したときには、ブックにある 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();
これは、出力ファイルとPrintScreenを次のとおりです。
と私はそれがこのように見えるようにしたい:でhttps://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/linqParentChild_615EF617.jpg
をhttps://aspblogs.blob.core.windows.net/media/muhanadyounis/Media/linqParentChild_615EF617.jpgは、Excelのスクリーンショットですか?それはそうではありません。 –
そうではありません。私はそのように見せたかった –
Excelでは不可能です。 –