【发布时间】:2018-04-04 07:21:20
【问题描述】:
我正在尝试将网格视图从网站导出到 excel 文档中。
我必须使用 Visual Basic,这很糟糕,因为如果它是 C#,我相信我会把它熏出来。
我一直收到这个错误
ScriptResource.axd?.... 未捕获的错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。 在 Function.Error$create [as create] (ScriptResource.axd? 在 PageRequestManager$_createPageRequestManagerParserError [as _createPageRequestManagerParserError] (ScriptResource.axd.....
我已经为我的按钮尝试了几种不同的 VB 脚本来导出该网格视图...所有这些都会导致相同的解析错误。
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
Me.BindGrid()
End If
End Sub
Private Sub BindGrid()
Dim strConnString As String = ConfigurationManager.ConnectionStrings("RData").ConnectionString
Using con As New SqlConnection(strConnString)
Using cmd As New SqlCommand("SELECT vWosearch.TypeofWorkOrder FROM vWOSearch")
Using sda As New SqlDataAdapter()
cmd.Connection = con
sda.SelectCommand = cmd
Using dt As New DataTable()
sda.Fill(dt)
wogridviewex.DataSource = dt
wogridviewex.DataBind()
End Using
End Using
End Using
End Using
End Sub
Public Sub Export_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls")
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
Using sw As New StringWriter()
Dim hw As New HtmlTextWriter(sw)
wogridviewex.RenderControl(hw)
Response.Write(hw)
Response.Output.Write(hw.ToString())
Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()
End Using
End Sub
Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub
我试过这个
Public Sub Export_Click(ByVal sender As Object, ByVal e As System.EventArgs)
wogridview.DataBind()
Response.Clear()
Response.Buffer = True
Response.AddHeader("Content-Disposition", "attachment; filename=MyExcelFileName.xls")
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Dim writer As New System.IO.StringWriter()
Dim html As New System.Web.UI.HtmlTextWriter(writer)
wogridview.GridLines = GridLines.Both
wogridview.RenderControl(html)
Response.Write(writer)
Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()
Response.End()
End Sub
Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub
来自 ASPx 页面的 gridview 很简单
<asp:UpdatePanel ID="outerupdatepanel" runat="server">
<ContentTemplate>
<asp:Button ID="ExportWorkOrders" runat="server" Text="Export to Excel" onclick="Export_Click"/>
<asp:GridView ID="wogridviewex" runat="server" AllowPaging="False" DataSourceID="SD1">
<Columns>
<asp:BoundField DataField="TypeofWorkOrder" HeaderText="Part Code" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="sd1" runat="server" ConnectionString='<%$ ConnectionStrings:here%>'
SelectCommand="blah enter my sql stuff">
</ContentTemplate>
</asp:UpdatePanel>
现在我使用 EPPlus API 仍然得到 Parse 错误。
Protected Sub CreateXLSXFile(sender As Object, e As EventArgs) Handles btnGenerateXLSX.Click
GenerateXLSXFile(CreateDataTable())
End Sub
Public Sub GenerateXLSXFile(tbl As DataTable)
Dim excelPackage = New ExcelPackage
Dim excelWorksheet = excelPackage.Workbook.Worksheets.Add("DemoPage")
excelWorksheet.Cells("A1").LoadFromDataTable(tbl, True)
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx")
Dim stream As MemoryStream = New MemoryStream(excelPackage.GetAsByteArray())
Response.OutputStream.Write(stream.ToArray(), 0, stream.ToArray().Length)
Response.Flush()
Response.Close()
End Sub
Private Function CreateDataTable() As DataTable
Dim dataTable As New DataTable("DT")
'TODO: INSERT CONNECTION STRING
Dim DBConnection As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("Rdata").ConnectionString)
DBConnection.Open()
Dim sql As String = "SELECT * from vwosearch;"
Dim cmd As New SqlCommand(sql, DBConnection)
Dim adaptor = New SqlDataAdapter
adaptor.SelectCommand = cmd
adaptor.Fill(dataTable)
DBConnection.Close()
Return dataTable
End Function
【问题讨论】:
-
开始使用专门的库来创建 Excel 文件,例如 EPPlus。您现在所做的只是创建一个扩展名为 .xls 的 HTML 页面。
-
我认为我不需要一个特殊的库来获取网格视图并将其转换为 excel。我为 EPPplus 安装了 nueget,但它们似乎不是将 girdview 导出到 excel 的任何 VB 示例。我找到了很多 C# 示例,但我需要一些在 VB 中有效的东西。
-
用户对这个网格视图做的另一件事是将它过滤到一组选定的数据,然后他们想要导出它,老板不希望他们像他们正在做的那样复制和粘贴现在进入 excel,但我必须使用的唯一示例不导出 Gridview。现在我的头脑告诉我不要将 gridview 导出到 excel 中,而是将查询结果导出到 excel 中。
-
我已经在网站中实现了 Epplus API,但在我为 VB 制定了所有类型的 API 后仍然出现解析错误。
标签: asp.net excel vb.net export