如何将ASP.NET页面导出到Excel?

时间:2009-02-23 02:30:04

标签: asp.net vb.net sql-server-2005

如何将我的webapp中的数据导出到ASP.NET中的Excel工作表(VB.NET,SQL 2005)?

10 个答案:

答案 0 :(得分:3)

更改ASP.Net页面的内容类型

Response.ContentType = "application/ms-excel"

答案 1 :(得分:3)

我最受欢迎的博客之一是如何使用Excel XML标记从.NET代码生成Excel文档(这不是OpenXML,它是标准的Excel XML ) - http://www.aaron-powell.com/linq-to-xml-to-excel

我还使用VB 9轻松实现了这一点。

虽然这是.NET 3.5代码,但可以使用XmlDocument在.NET 2.0中轻松完成并以此方式创建节点。

然后,只需设置正确的响应标头并在响应中回传即可。

答案 2 :(得分:1)

SpreadsheetGear for .NET将会这样做。您可以使用C#和amp;找到一堆实时ASP.NET样本。 this page上的VB.NET源代码。

免责声明:我拥有SpreadsheetGear LLC

答案 3 :(得分:1)

如果您可以在GridView控件中显示数据,它本身就支持“右键单击 - >导出到Excel”,而无需编写任何代码。

答案 4 :(得分:0)

SQL Server Reporting服务是将数据从应用程序导出到Excel的最佳方式。

如果你没有访问/不要使用报告服务,这取决于你想要提取/格式化的数据,可能使用CSV结构而不是Excel可能是最容易的。

答案 5 :(得分:0)

使用Microsoft.Office.Interop.Excel dll创建包含数据的excel文件,然后使用Hunter Daley的下载方法提供下载文件的链接......

答案 6 :(得分:0)

作为一般解决方案,您可能需要考虑编写处理程序(ashx)以进行导出 - 并传递查询参数以重新创建查询以生成数据,或传递标识符以从缓存中获取数据(如果缓存) 。根据CSV是否足以用于Excel导出,您可以格式化数据并将其发回,将ContentType设置为@Hunter建议或使用主互操作程序集(这需要服务器上的Excel)来构建真实的Excel电子表格和将其序列化为响应流。

答案 7 :(得分:0)

我更喜欢使用OLEDB连接字符串。

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Excel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";

答案 8 :(得分:0)

不确定导出页面,但是您只想导出数据集或数据表

        HttpContext.Current.Response.Clear()
        HttpContext.Current.Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", fileName))
        HttpContext.Current.Response.ContentType = "application/ms-excel"

        Dim sw As StringWriter = New StringWriter
        Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)


        Dim table As Table = New Table

        table.RenderControl(htw)

        '  render the htmlwriter into the response
        HttpContext.Current.Response.Write(sw.ToString)
        HttpContext.Current.Response.End()

答案 9 :(得分:0)

我使用与CodeKiwi几乎完全相同的代码。如果您有DataTable并希望将其流式传输到客户端浏览器,我会使用它。

如果你想要一个文件,你也可以在每一行/每一行做一个简单的循环,创建一个CSV文件,我想提供一个到客户端的链接 - 你可以使用CSV或XLS的文件扩展名。或者,如果将生成的文件流式传输到客户端,则会提示他们是否要打开或将其保存到磁盘。

对于小型数据集来说,互操作是(上次我尝试过它们)很好,但是没有很好的扩展 - 对于较大的数据集来说,这是非常慢的。