从VB.Net将DataTable导出到Excel

时间:2016-01-11 17:12:33

标签: asp.net vb.net excel

以下代码是我目前尝试从VB.Net中的网站按钮打开excel中的一些数据。我希望数据显示准系统,但网站上的表格格式始终如下。分页和颜色使数据几乎无法读取,只能看到第一页数据。任何快速修复?我已经尝试了很多我在这里找到的东西,但无济于事。

dt

2 个答案:

答案 0 :(得分:0)

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Try
            Dim ScriptManager As ScriptManager = ScriptManager.GetCurrent(Me.Page)
            ScriptManager.RegisterPostBackControl(Me.btnExportToExcel)

    Catch ex As Exception

    End Try
End Sub



Protected Sub btnExportToExcel_Click(sender As Object, e As EventArgs) Handles btnExportToExcel.Click
    Try

        Dim sw As New System.IO.StringWriter()
        Dim hw As New System.Web.UI.HtmlTextWriter(sw)
        Dim style As String = "<style>.textmode{mso-number-format:\@;}</style>"

        Response.Clear()
        Response.Buffer = True

        Response.AddHeader("content-disposition", "attachment;filename=SignExport.xls")
        Response.Charset = ""
        Response.ContentType = "application/vnd.ms-excel"

        For i As Integer = 0 To Me.Grid_Bad_Meters.Rows.Count - 1
            Dim row As GridViewRow = Grid_Bad_Meters.Rows(i)
            row.Attributes.Add("class", "textmode")
        Next
        'lblRptHeader.RenderControl(hw)
        hw.WriteBreak()
        'lblReportDateRange.RenderControl(hw)
        Grid_Bad_Meters.RenderControl(hw)
        Response.Write(style)
        Response.Output.Write(sw.ToString())
        Response.Flush()
        Response.End()






    Catch ex As Exception


    End Try

End Sub

答案 1 :(得分:-1)

您可以使用下面提到的两种方法之一。当然,还有其他方法可以满足您的需求,例如导出到评论中提到的csv文件,或者使用.Net库来导出像epplus这样的Excel。

OpenXML方法

如果您正在寻找一种不使用html方法导出到Excel的方法,那么您可以使用OpenXML方法,该方法通过此URL的工作示例非常清楚地解释:Export to Excel using OpenXML。这将eliminate all the CSS styles可以与使用html方法导出相关联,并且您似乎根据原始帖子中的代码使用此html方法。但是,如果你想使用html方法,那么下面的代码应该可以工作并消除查看excel文件时可能出现的所有CSS样式。在把它放到这里之前,我已经在我的机器上尝试了这个发布的代码。

Html方法

您可以在导出方法中创建GridView的新实例,而不是使用现有实例,并且数据将其绑定到与页面上现有gridview相同的数据,然后再将其渲染为excel。在数据绑定导出方法之前,您需要确保没有设置样式,特别是网格线设置为无,如下面的代码所示。

您可以在此网址上看到实际视频: Grid Export without any CSS Styles。这就是我运行时代码在笔记本电脑上的行为方式。

您可以使用下面的示例代码,但请确保将数据源设置为包含原始gridview所有页面中所有记录的数据。我已使用SqlDataSource1作为数据源,但您可以在适当的情况下使用适当的方法替换它。

Protected Sub btnExport_Click(sender As Object, e As EventArgs)
    Dim GridView2 As New GridView()
    GridView2.AllowPaging = False
    GridView2.AllowSorting = False
    GridView2.Style.Clear()
    GridView2.CellPadding = 0
    GridView2.CellSpacing = 0
    GridView2.GridLines = GridLines.None
    GridView2.BorderStyle = BorderStyle.None
    GridView2.BorderWidth = Unit.Pixel(0)
    GridView2.AlternatingRowStyle.BorderStyle = BorderStyle.None
    GridView2.DataSource = SqlDataSource1
    GridView2.DataBind()

    ' Clear the response  
    Response.Clear()

    ' Set the type and filename  
    Response.AddHeader("content-disposition", "attachment;filename=griddata.xls")
    Response.Charset = ""
    Response.ContentType = "application/vnd.xls"

    ' Add the HTML from the GridView to a StringWriter so we can write it out later  
    Dim sw As New System.IO.StringWriter()
    Dim hw As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(sw)
    GridView2.RenderControl(hw)

    ' Write out the data  
    Response.Write(sw.ToString())
    Response.[End]()
End Sub
Public Overrides Property EnableEventValidation() As Boolean
    Get
        Return False
    End Get
            'Do nothing
    Set
    End Set
End Property
Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    'Allows for printing
End Sub