使用ASP.NET生成Excel文档网站

问题描述:

我有一个ASP.NET应用程序,它可以帮助用户创建一个带有特定数据的Gridview。一旦生成此表我希望用户按下一个按钮,并能够保存表为Excel document.There两种不同的方法,我知道的:使用ASP.NET生成Excel文档网站

  1. 使用的HtmlTextWriter与ContentType的“应用程序/越南盾。 ms-excel“将该文件作为HttpResponse发送。我使用GridView1.RenderControl(htmlTextWriter)来呈现gridview。这几乎可以工作,但当文件打开时,excel文件总是显示警告,因为内容与扩展名不匹配。我尝试了各种内容类型无济于事。这是有道理的,因为我正在使用HtmlWriter。这似乎也不是一个好习惯。

  2. 我试过的第二件事是使用Office自动生成Excel文件。但是对于要生成的文件,我需要将其保存到磁盘然后再次读取。从我读过的内容来看,这是唯一的办法,因为Excel对象一旦保存就只会变成真正的Excel文件。我发现Excel类中的.saveas方法会因写入权限而引发异常,即使我试图保存在App_Data文件夹中。所以,我做了一些研究,发现显然办公自动化是鼓励使用Web服务:https://support.microsoft.com/en-us/kb/257757

微软目前并不提倡,不支持, 自动化的Microsoft Office应用程序从任何无人值守, 非交互式客户端应用程序或组件(包括ASP, ASP.NET,DCOM和NT服务),因为Office在此环境中运行Office时可能会出现不稳定的 行为和/或死锁。

肯定必须有一种保存方式让网站生成一个Excel文件并提供给用户!我无法想象这个问题没有得到解决,也没有人关心这个问题,但我找不到任何好的解决方案。

创建一个Excel文件的最简单的(和最好)的方法是使用epplus

Epplus sample for webapplication

  using (ExcelPackage pck = new ExcelPackage()) 
      { 
       ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo"); 

       //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1 
       ws.Cells["A1"].LoadFromDataTable(tbl, true); 

       //Format the header for column 1-3 
       using (ExcelRange rng = ws.Cells["A1:C1"]) 
       { 
        rng.Style.Font.Bold = true; 
        rng.Style.Fill.PatternType = ExcelFillStyle.Solid;      //Set Pattern for the background to Solid 
        rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189)); //Set color to dark blue 
        rng.Style.Font.Color.SetColor(Color.White); 
       } 

       //Example how to Format Column 1 as numeric 
       using (ExcelRange col = ws.Cells[2, 1, 2 + tbl.Rows.Count, 1]) 
       { 
        col.Style.Numberformat.Format = "#,##0.00"; 
        col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; 
       } 

       //Write it back to the client 
       Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx"); 
       Response.BinaryWrite(pck.GetAsByteArray()); 
} 
+0

这看起来像一个有用的工具,但我扶正为我公司与该Web应用程序我认为GNU许可证不会解决问题。从这里和其他线索我缺乏答案我GOOGLE了,我觉得没有第三方工具没有好办法!?那真的是这样吗? – user2696330

+0

epplus是最好的办法,如果你想要一个产品,那么我可以推荐软工匠excel /办公室作家,但它是相当昂贵的 – Thorarins

+0

没有第三方,是的好epplus是用c#和.net编写的,所以看看在源代码中,做同样的事情你自己... – Thorarins