我有一个ASP.NET应用程序,可以帮助用户创建包含特定数据的Gridview。生成此表后,我希望用户按下一个按钮,并能够将表保存为Excel文档。我知道有两种不同的方法:
将HtmlTextWriter与ContentType“application / vnd.ms-excel”一起使用,将文件作为HttpResponse发送。我使用GridView1.RenderControl(htmlTextWriter)来渲染gridview。这几乎可以工作,但是当文件打开时,excel文件总是会显示警告,因为内容与扩展名不匹配。我尝试了各种内容类型无济于事。这是有道理的,我猜,因为我正在使用HtmlWriter。这似乎也不是一个好习惯。
我尝试的第二件事是使用Office Automation生成Excel文件。但是对于要生成的文件,我需要将其保存到磁盘然后再次读取。根据我的阅读,这是唯一的方法,因为Excel对象只有在保存后才会成为真正的Excel文件。我发现Excel类中的.saveas方法会因为写权限而抛出异常,即使我试图保存在App_Data文件夹中也是如此。所以我做了一些研究,发现显然Office Web Automation不支持Web服务:https://support.microsoft.com/en-us/kb/257757
Microsoft目前不推荐,也不支持, 任何无人值守的Microsoft Office应用程序的自动化, 非交互式客户端应用程序或组件(包括ASP, ASP.NET,DCOM和NT服务),因为Office可能会出现不稳定 Office在此环境中运行时的行为和/或死锁。
肯定有一种保存方式让网站生成Excel文件并提供给用户!?我无法想象这个问题没有解决或者很少见到没有人关心它,但我找不到任何好的解决方案。
答案 0 :(得分:0)
创建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());
}