Asp.net 将GridView数据导出到Excel中
您好,我正在尝试将gridview数据导出到excel中,这里是我代码的一部分,它创建了文件,但当我打开文件时,exel说它不是exl文件,当我强制打开时,它会根据需要显示信息(尽管网格周围都是空白区域)除此之外,我遵循代码,注意到它捕获了一个exeption ex,上面写着这样的内容: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.”它讨论了标记类型和放置(有点混乱,因为它用我的语言显示) 代码隐藏:
“'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种其他方法来做你正在尝试的事情好运巴德希望我可以帮助你