如何在实体框架项目中将表格数据转换为Excel格式

本文关键字:数据 表格 转换 格式 Excel 实体 框架 项目 | 更新日期: 2023-09-27 18:04:45

我有一个实体框架项目,我有名为的表

  • dbo.patient
  • dbo.doctor
  • dbo.disease

这三张表是相互联系的。

我需要将带有医生姓名和疾病名称的患者数据转换为Excel格式的文件。。。我必须做些什么才能做到这一点?

我不知道怎么做…

有人能提供步骤吗?

我应该创建一个存储过程吗?如何将数据转换为Excel格式?

我可以在不使用存储过程的情况下执行此操作吗?

如何在实体框架项目中将表格数据转换为Excel格式

您可以使用名为EPPlus免费开源库。

以下是链接:EPPlus创建高级Excel电子表格

以下是如何做到这一点。。

步骤1:

在Package Manager控制台上运行以下命令:

PM>安装程序包eppls

步骤2:

这是导出数据的方法:

注意:使用EF查询从服务器检索data后,可以将其替换为actual data

public void ExportListUsingEPPlus()
       {
           //this is the data retrieval point you have to replace with your data
           var data = new[]{ 
              new{ Name="Myname", Email="myna@google.com"},
              new{ Name="yourname", Email="your@yahoo.com"},
              new{ Name="saman", Email="saman@yahoo.com"},
           };
 
           ExcelPackage excel = new ExcelPackage();
           var workSheet = excel.Workbook.Worksheets.Add("Sheet1");
           workSheet.Cells[1, 1].LoadFromCollection(data, true);
           using (var memoryStream = new MemoryStream())
           {
               Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
               Response.AddHeader("content-disposition", "attachment;  filename=Contact.xlsx");
               excel.SaveAs(memoryStream);
               memoryStream.WriteTo(Response.OutputStream);
               Response.Flush();
               Response.End();
           }
       }

您可以以html或csv格式导出数据,并让Excel进行转换。这有它自己的陷阱。

例如,对于csv,如果您的文本数据看起来像日期或数字,Excel会将其转换为日期或数字。当这种情况发生时,我在数据中放入一个制表符来阻止它

而且,对于html,如果你告诉浏览器应该使用Excel打开它,用户会收到一个警告,即格式不是Excel。

尽管如此,我还是使用这些技术在MVC应用程序中进行了简单的导出,而无需使用库。

将响应设置为Excel(用于html输出(:

protected void SetResponseToExcel(string fileName)
{
    HttpContext.Response.Clear();
    HttpContext.Response.AddHeader("content-disposition",
      "attachment;filename=" + fileName);
    HttpContext.Response.Charset = "";
    HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Response.ContentType = "application/vnd.ms-excel";
}

将响应设置为csv:

protected void SetResponseToText(string fileName)
{
    HttpContext.Response.Clear();
    HttpContext.Response.AddHeader("content-disposition",
       "attachment;filename=" + fileName);
    HttpContext.Response.Charset = "";
    HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Response.ContentType = "text/csv";
}

进行导出:

   public ActionResult MyExport()
   {
        SetResponseToText("MyFilename.csv");
        Response.Write(String.Format("'"{0}'",...,{26}",
           "Heading 1", ..., Environment.NewLine));
        Response.Flush();
        IEnumerable<MyClass> exportData = _MyService.GetMyData();
        foreach (var row in exportData)
        {
            Response.Write(String.Format("'"{0}'"...,{26}",
                "'t" + row.Field1, //tab character to force Excel to treat it as text
                 row.Field2, ..., Environment.NewLine));
        }
        Response.Flush();
        Response.End();
        return null;
    }