【发布时间】:2023-03-13 01:04:01
【问题描述】:
如何将我的 webapp 中的数据从 ASP.NET (VB.NET,SQL 2005) 导出到 Excel 工作表?
【问题讨论】:
标签: asp.net vb.net sql-server-2005
如何将我的 webapp 中的数据从 ASP.NET (VB.NET,SQL 2005) 导出到 Excel 工作表?
【问题讨论】:
标签: asp.net vb.net sql-server-2005
更改 ASP.Net 页面的内容类型
Response.ContentType = "application/ms-excel"
【讨论】:
我最受欢迎的博客之一是如何使用 Excel XML 标记从 .NET 代码生成 Excel 文档(这不是 OpenXML,它是标准的 Excel XML)-http://www.aaron-powell.com/linq-to-xml-to-excel p>
我还链接到使用 VB 9 的更简单方法。
虽然这是 .NET 3.5 代码,但可以在 .NET 2.0 中使用 XmlDocument 轻松完成并以这种方式创建节点。
然后只需设置正确的响应标头并在响应中流回即可。
【讨论】:
SpreadsheetGear for .NET 可以做到。您可以在 this page 上找到一堆带有 C# 和 VB.NET 源代码的实时 ASP.NET 示例。
免责声明:我拥有 SpreadsheetGear LLC
【讨论】:
如果您可以在 GridView 控件中显示您的数据,它本身就支持“右键单击-->导出到 Excel”,而无需编写任何代码。
【讨论】:
SQL Server 报告服务是将数据从应用程序导出到 Excel 的最佳方式。
如果您无权访问/不想使用报告服务,具体取决于您想要提取/格式化的数据,可能使用 CSV 结构而不是 Excel 可能是最简单的。
【讨论】:
使用 Microsoft.Office.Interop.Excel dll 使用您的数据创建 excel 文件,然后使用 Hunter Daley 的下载方法提供下载文件的链接...
【讨论】:
作为一般解决方案,您可能需要考虑编写处理程序 (ashx) 以进行导出 - 并传递查询参数以重新创建查询以生成数据或传递标识符以从缓存中获取数据(如果已缓存) .根据 CSV 是否足以用于 Excel 导出,您可以只格式化数据并将其发送回,将 ContentType 设置为 @Hunter 建议的或使用主互操作程序集(这将需要服务器上的 Excel)来构建真正的 Excel 电子表格和将其序列化为响应流。
【讨论】:
我更喜欢使用 OLEDB 连接字符串。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Excel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
【讨论】:
不确定是否要导出页面,但如果您只想导出数据集或数据表
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()
【讨论】:
我使用与 CodeKiwi 几乎完全相同的代码。如果您有一个 DataTable 并希望将其流式传输到客户端浏览器,我会使用它。
如果你想要一个文件,你也可以通过每一行/列做一个简单的循环,创建一个 CSV 文件,我想提供一个到客户端的链接 - 你可以使用 CSV 或 XLS 的文件扩展名。或者,如果您将生成的文件流式传输到客户端,它会提示他们是否要打开或将其保存到磁盘。
互操作(我上次尝试过)非常适合小型数据集,但不能很好地扩展 - 对于大型数据集来说速度非常慢。
【讨论】: