Asp.net 将GridView数据导出到Excel中

Asp.net 将GridView数据导出到Excel中,asp.net,vb.net,gridview,Asp.net,Vb.net,Gridview,您好,我正在尝试将gridview数据导出到excel中,这里是我代码的一部分,它创建了文件,但当我打开文件时,exel说它不是exl文件,当我强制打开时,它会根据需要显示信息(尽管网格周围都是空白区域)除此之外,我遵循代码,注意到它捕获了一个exeption ex,上面写着这样的内容: “'ctl00\u contentplaceholder 1\u approvalGrid''GridView'runat=server.”它讨论了标记类型和放置(有点混乱,因为它用我的语言显示) 代码隐藏:

您好,我正在尝试将gridview数据导出到excel中,这里是我代码的一部分,它创建了文件,但当我打开文件时,exel说它不是exl文件,当我强制打开时,它会根据需要显示信息(尽管网格周围都是空白区域)除此之外,我遵循代码,注意到它捕获了一个exeption ex,上面写着这样的内容:

“'ctl00\u contentplaceholder 1\u approvalGrid''GridView'runat=server.”
它讨论了标记类型和放置(有点混乱,因为它用我的语言显示)

代码隐藏:

 Protected Sub exportExelBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles exportExelBtn.Click    
    If approvalGrid.Rows.Count > 0 Then
            Try    

                Response.ClearContent()
                Response.Buffer = True
                Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", "poView.xls"))
                Response.ContentEncoding = Encoding.UTF8
                Response.ContentType = "application/ms-excel"
                ' Dim sw As New stringwriter()
                Dim tw As New IO.StringWriter()
                Dim htw As New HtmlTextWriter(tw)
                approvalGrid.RenderControl(htw)
                Response.Write(tw.ToString())
                Response.[End]()

            Catch ex As Exception

            End Try
  END IF
 END SUB
标记:

 <%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="PoViewTable.aspx.vb" Inherits="PoViewTable" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

                    <asp:GridView ID="approvalGrid" runat="server" AllowSorting="True" 
                AutoGenerateColumns="False" DataSourceID="poViewSql" Visible="False">
                <Columns>
                    <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" 
                        ReadOnly="True" SortExpression="id" />
                    <asp:BoundField DataField="poID" HeaderText="poID" SortExpression="poID" visible = "false"/>
                    <asp:BoundField DataField="companyID" HeaderText="companyID" 
                        SortExpression="companyID" />
                    <asp:BoundField DataField="requesterID" HeaderText="requesterID" 
                        SortExpression="requesterID" />
                    <asp:BoundField DataField="departmentID" HeaderText="departmentID" 
                        SortExpression="departmentID" />
                    <asp:BoundField DataField="subDepartmentID" HeaderText="subDepartmentID" 
                        SortExpression="subDepartmentID" />
                    <asp:BoundField DataField="date" HeaderText="date" SortExpression="date" />
                    <asp:BoundField DataField="amount" HeaderText="amount" 
                        SortExpression="amount" />
                    <asp:BoundField DataField="supplierID" HeaderText="supplierID" 
                        SortExpression="supplierID" />
                    <asp:BoundField DataField="comments" HeaderText="comments" 
                        SortExpression="comments" />
                    <asp:BoundField DataField="managerID1" HeaderText="managerID1" 
                        SortExpression="managerID1" />
                    <asp:BoundField DataField="managerStatus1" HeaderText="managerStatus1" 
                        SortExpression="managerStatus1" />
                    <asp:BoundField DataField="managerID2" HeaderText="managerID2" 
                        SortExpression="managerID2" />
                    <asp:BoundField DataField="managerStatus2" HeaderText="managerStatus2" 
                        SortExpression="managerStatus2" />
                    <asp:BoundField DataField="poStatus" HeaderText="poStatus" 
                        SortExpression="poStatus" />
                </Columns>
            </asp:GridView>
            <br />

...
...   

</asp:Content>


... ...
请在代码中添加此功能

 Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    ' Verifies that the control is rendered
End Sub
欲了解更多详情,请访问

也可以使用其他方法将gridview导出到excel

Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    ' Confirms that an HtmlForm control is rendered for the specified ASP.NET
'           server control at run time.     

End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs)


    Using sw As New StreamWriter("c:\test.xls")
        Using hw As New HtmlTextWriter(sw)
            GridView1.RenderControl(hw)
        End Using
    End Using

End Sub

此代码有效,只需修改它,即可

Dim sb As StringBuilder = New StringBuilder() 
Dim SW As System.IO.StringWriter = New System.IO.StringWriter(sb) 
Dim htw As HtmlTextWriter = New HtmlTextWriter(SW)
Dim Page As Page = New Page() 
Dim form As HtmlForm = New HtmlForm()
Me.GridView.EnableViewState = False
Page.EnableEventValidation = False
Page.DesignerInitialize() 
Page.Controls.Add(form) 
form.Controls.Add(Me.GridView)
Page.RenderControl(htw)
Response.Clear()
Response.Buffer = True 
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "attachment;filename=data.xls") Response.Charset = "UTF-8"
Response.ContentEncoding = Encoding.Default
Response.Write(sb.ToString())
Response.End()
有几件事需要注意

您正在捕获异常,但没有对它们做任何处理。这是一个好主意。不要这样做。曾经记录异常,或创建通知消息。不要只是吞下它

您实际上并不是在创建Excel文件。您正在创建HTML并为其提供Excel扩展。这就是为什么Excel会抓狂的原因。Excel知道如何读取HTML表,但由于它是错误的扩展,它希望与您验证它是否可以这样做。这里发布的其他答案都没有提到这一点

通常,使用HTML将数据导出到excel是一个坏主意。您无法轻松控制输出,并且很难避免在打开文件时收到警告消息

将错误发布到堆栈溢出时,请包含所有相关详细信息。实际上,您从未告诉我们异常的名称,或抛出异常的行。这是重要的信息


相反,您应该使用专门用于将数据导出到Excel的库。您应该导出基础数据,而不是导出GridView。我最喜欢的图书馆是。创建一个实际的.xlsx(开放式Office XML电子表格)文件非常简单,而且你可以使用良好的格式。

你有没有尝试用谷歌搜索你的问题?看看这个,希望你发现你正在寻找的东西,你正在尝试做的事情其实很容易,如果答案不符合你的喜好,我建议你用谷歌搜索可能还有10种其他方法来做你正在尝试的事情好运巴德希望我可以帮助你