2012-03-05 70 views
3

我想导出一个gridview的内容到excel。我有一些代码:GridView导出到Excel导出整个aspx页面

public void ExcelDownload(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.Charset = "UTF-8"; 
     Response.AppendHeader("Content-Disposition", "attachment;filename=MailingList.xls"); 
     Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); 
     Response.ContentType = "application/ms-excel"; 
     this.EnableViewState = false; 
     System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("EN-US", true); 
     System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); 
     System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); 
     MailingList.RenderControl(oHtmlTextWriter); 
     Response.Write(oStringWriter.ToString()); 
    } 

单击链接时运行。这工作正常,除了它是出口整个网页,而不是只是gridview(MailingList)。有谁知道如何解决这一问题?

回答

2

从技术上讲,这不会导出为Excel,但是您发送了一个错误标题的HTML来诱使浏览器使用Excel打开此内容。如果你坚持使用这个解决方案,你必须在单独的aspx页面上渲染GridView。

此解决方案可能存在问题,但它会自我警告用户内容与扩展名不同,因为您发送的是HTML,而您的响应标头说这是一个Excel文件。我敢打赌,客户端上的某些反恶意软件或类似服务器上的某些反恶意软件会阻止此响应,因为服务的内容不是头中声明的内容,而是已知的恶意软件行为。

更好地使用NPOI(xls)或/和EPPlus(xlsx)并完全控制您的excel导出。

+0

好吧,我正在试用EPPlus。希望它有效!谢谢你的帮助。 – shawleigh17 2012-03-05 20:06:44

+0

哦,它工作得很好,你可以在这里看到导出DataTable到xlsx的例子http://stackoverflow.com/questions/9569401/c-sharp-create-modify-read-xlsx-files/9569827#9569827 – 2012-03-05 20:28:08