【问题标题】:Exporting Web Site Gridview to Excel with Visual Basic使用 Visual Basic 将网站 Gridview 导出到 Excel
【发布时间】: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


【解决方案1】:

发生这种情况的原因是我有一个

<asp:UpdatePanel ID="outerupdatepanel" runat="server">
<ContentTemplate>

在顶部并在底部关闭,删除 ASP:updatePanel 可以消除解析错误。只要您从 aspx 中删除 Updatepanel 部分,上述所有 3 种方法都有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多