将Gridview导出到Excel Vb.net

时间:2015-07-14 07:19:12

标签: asp.net vb.net excel gridview

所以我一直在努力,似乎无法得到我想要的结果。我有一个带有gridview的页面,它正在使用母版页。导出按钮位于主页面上,我只需要导出实际页面上的gridview数据。

gridview上有一些隐藏的列,这些列不得包含在导出到excel的数据中。

有没有人有一些实际可以做到这一点的代码,而没有抓住Gridview周围的任何其他格式(即页面本身)?

我基本上使用此网址上的代码:Export Gridview Data to Excel - Change the header name(我转换为VB.net)

但似乎是将网格上的所有数据导出为ex​​cel,包括隐藏列。

我希望有人可以提供帮助。

感谢。

3 个答案:

答案 0 :(得分:0)

我一直在寻找解决方案。我之前查看了你的代码,我似乎无法让它工作 - 但这是因为缺乏知识。所以对于可能会遇到同样问题的其他人来说,这是我的方案和解决方案,请注意这是在VB中,可以使用任何在线转换工具进行转换:

场景:我有一个带有导出按钮的母版页,该按钮使用母版页从页面上的gridview导出数据。

在使用Gridview的页面的Page_Load事件中,我使用了以下代码:

Dim myMasterPage As MasterPageName = Page.Master

Dim exportButton As System.Web.UI.WebControls.Button = myMasterPage.FindControl("ButExportExcel")

If (exportButton IsNot Nothing) Then 
    AddHandler exportButton.Click, AddressOf Me.ButExportExcel_Click
End If

然后我创建了公共子:

Private Sub ButExportExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim sMethod = "ButExportExcel_Click"
    Dim sErrorMessage = ""
    Dim sExportFileName As String = ""

    Try

        sExportFileName = Path.GetFileName(Request.PhysicalPath)
        sExportFileName = sExportFileName.Substring(0, sExportFileName.Length - 5) & ".xls"

        Response.Clear()
        Response.AddHeader("content-disposition", "attachment; filename=" & sExportFileName)
        Response.ContentType = "application/vnd.xls"
        Dim WriteItem As System.IO.StringWriter = New System.IO.StringWriter()
        Dim htmlText As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(WriteItem)
        SummaryGridView.AllowPaging = False
        'Dim dtSupplier As DataTable = CType(ViewState("dtSupplier"), DataTable)
        'SummaryGridView.DataSource = dtSupplier
        SummaryGridView.DataBind()
        SummaryGridView.RenderControl(htmlText)
        Response.Write(WriteItem.ToString())
        Response.End()

    Catch ex As Exception



    End Try
End Sub

然后添加以下内容:

Public Overrides Sub VerifyRenderingInServerForm(control As Control)
End Sub

不幸的是,这意味着它需要进入您希望从中导出gridview的每个页面,但它为我完成了这项工作。这只会导出gridview中的数据。

我希望这可以帮助那些遇到同样问题的人。

答案 1 :(得分:0)

我实际上找到了另一种方式,它不会影响页面本身,但只需要在母版页上完成。

Public Overrides Sub VerifyRenderingInServerForm(control As Control)不是必需的:

'导出主页中的点击事件:

(Ljava/lang/String;)D

答案 2 :(得分:-1)

2019年ACB LES DEJO UNA职能组合复杂计划

PARA VB.NET

私人子GenerarExcel()

    Dim excel As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application()
    excel.Application.Workbooks.Add(True)
    Dim ColumnIndex As Integer = 0
    For Each col As DataGridViewColumn In GrillaReporte.Columns
        ColumnIndex += 1
        excel.Cells(1, ColumnIndex) = col.Name

    Next

    Dim rowIndex As Integer = 0
    For Each row As DataGridViewRow In GrillaReporte.Rows

        rowIndex += 1
        ColumnIndex = 0
        For Each col As DataGridViewColumn In GrillaReporte.Columns

            ColumnIndex += 1
            excel.Cells(rowIndex + 1, ColumnIndex) = row.Cells(col.Name).Value

        Next


    Next

    excel.Visible = True


End Sub

PARA C#

private void GenerarExcel() {

        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

        excel.Application.Workbooks.Add(true);

        int ColumnIndex = 0;

        foreach (DataGridViewColumn col in GrillaArticulos.Columns)
        {
            ColumnIndex++;

            excel.Cells[1, ColumnIndex] = col.Name;

        }

        int rowIndex = 0;

        foreach (DataGridViewRow row in GrillaArticulos.Rows)
        {

            rowIndex++;

            ColumnIndex = 0;

            foreach (DataGridViewColumn col in GrillaArticulos.Columns)
            {

                ColumnIndex++;

                excel.Cells[rowIndex + 1, ColumnIndex] = row.Cells[col.Name].Value;

            }

        }

        excel.Visible = true;


    }