将网格视图导出到Excel

需要帮助把我的GridView到一个Excel文档。 我已经尝试了几个例子,似乎无法做到。 任何帮助将非常感激。 这是我的GridView代码,它正在从SQL数据库填充。

<div> <asp:GridView Align="Center" ID="gvResults" AutoGenerateColumns="false" runat="server" Width="608px" Style="width: 80%; margin-bottom: 0px" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowDataBound="gvResults_RowDataBound"> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <Columns> <asp:TemplateField> <ItemTemplate> <asp:Image ID="imgDataMoreInfo" ImageUrl="T:\Groups\IntResoures\pic\tabpic.jpg" CssClass="img_data_moreinfo" Height="7" Width="7" runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Government Name & Address"> <ItemTemplate> <asp:Label ID="lblGovernmentNameAddress" runat="server" Text=""></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="DOB" HeaderText="DOB" /> <asp:TemplateField HeaderText="SSFHS Name & Address"> <ItemTemplate> <asp:Label ID="lblSSFHSNameAddress" runat="server" Text=""></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="ssfhsdob" HeaderText="DOB" /> <asp:TemplateField HeaderText="Match Status"> <ItemTemplate> <asp:RadioButtonList ID="rblMatchStatus" runat="server" RepeatDirection="Vertical"></asp:RadioButtonList> <asp:Label ID="lblFirst" CssClass="displayNone" runat="server" /> <asp:Label ID="lblSecond" CssClass="displayNone" runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns> <EditRowStyle BackColor="#999999" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#E9E7E2" /> <SortedAscendingHeaderStyle BackColor="#506C8C" /> <SortedDescendingCellStyle BackColor="#FFFDF8" /> <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> </asp:GridView> </div> 

我的导出button和事件

 <asp:Button ID="btnExportToExcel" OnClick="btnExportToExcel_Click" runat="server" Text="Export to Excel" Width="89px" Font-Size="X-Small" /> protected void btnExportToExcel_Click(object sender, EventArgs e) { } 

以下是与您的代码相关的更具体的一个:

  protected void btnExportToExcel_Click(object sender, EventArgs e) { Response.Clear(); Response.AddHeader("content-disposition", "attachment; filename=FileName.xls"); Response.Charset = ""; // If you want the option to open the Excel file without saving than // comment out the line below // Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/vnd.xls"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); gvResults.RenderControl(htmlWrite); Response.Write(stringWrite.ToString()); Response.End(); 

}

上周我刚刚做了这个。

下面是你需要放置在你的aspx文件中的代码(你可以根据自己的喜好玩这个高度和宽度):

 <asp:Button ID="ButtonA" runat="server" height="20px" OnClick="ButtonA_Click" Text="Export me" Width="200px /> 

在aspx页面顶部的Page部分插入:

 EnableEventValidation="false" 

在你的cs文件中,在'protected void Page_Load …'部分下面放置以下内容:

 Protected void ButtonA_Click(object sender, EventArgs e) { Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=Filename.xls"); Response.ContentType = "application/vnd.xlsx"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); GridView1.RenderControl(htmlWrite); Response.Write(stringWrite.ToString()); Response.End(); } 

忽略出现的错误并点击“是”。 出现的错误是因为生成的文件不是纯粹的Excel文件types。 它会生成一个文本文件。 将它保存为一个电子表格,你会很好去。

通常在写作时擅长

 GridView1.RenderControl(htmlWrite); Response.Write(stringWrite.ToString()); 

将它简单地保存为html表格,而不是二进制文件。 检查,如果你是关心。

我的项目也有同样的问题。

那么

  • 我只是在我的项目文件夹中创build空的xcel文件的模板,
  • 然后我写数据。

     string filePath = Server.MapPath("~/ReportFiles/CenterMemberAddressDifferentReport_" + Emp_Session._UserMasterId + ".xls"); System.IO.File.Copy(Server.MapPath("~/Images/ExcelTemplate.xls"), filePath, true); System.Threading.Thread.Sleep(1000); string driver = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + filePath + "';Extended Properties=Excel 8.0;"; System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection(driver); System.Data.OleDb.OleDbCommand Com = Con.CreateCommand(); System.Data.OleDb.OleDbDataAdapter reader = new OleDbDataAdapter(); Con.Open(); DataTable dtSheet = Con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string SQL = ""; foreach (DataRow Row in dt1.Rows) { string values = ""; for (int ik = 0; ik < dt1.Columns.Count; ik++) { if (values != "") values += ","; values += "'" + Row[ik].ToString() + "'"; } SQL = "INSERT INTO [Sheet1$] ([CENTER NAME],[CENTER ADDRESS],[MEMBER ID],[MEMBER NAME],[MEMBER ADDRESS],[MEMBER COUNT]) VALUES(" + values + ")"; Com.CommandText = SQL; Com.ExecuteNonQuery(); } Con.Close(); System.Threading.Thread.Sleep(1000); System.IO.FileStream stream = System.IO.File.OpenRead(filePath); byte[] by = new byte[stream.Length]; stream.Read(by, 0, by.Length); stream.Close(); System.Threading.Thread.Sleep(1000); System.IO.File.Delete(filePath); Response.OutputStream.Write(by, 0, by.Length); Response.End(); 

基本上我是在导入相同的Excel到另一个数据源的情况下,secsecfull。


希望它能帮助你。 请求plz feedbak。 谢谢你的美丽的问题。