将多个gridviews导出到多个excel选项卡(工作表)

我在我的网站有6个gridviews,我需要导出到excel,但每个在一个不同的表。

这个链接导出GridView到多个Excel工作表使用的东西很相似,但他使用的是数据集,我不是。 我是C#的新手,所以我不能改变它来适应我的解决scheme。

我的代码将所有的gridviews导出到同一张表。 我创build了一个循环来运行我的gridviews,现在我需要把一个代码生成每个excel表单。

protected void btExcel_Click(object sender, EventArgs e) { Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment;filename=FARPOP_Mensal_" + txDt.Text + ".xls"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("Windows-1252"); Response.Charset = "ISO-8859-1"; Response.ContentType = "application/vnd.ms-excel"; using (StringWriter sw = new StringWriter()) { HtmlTextWriter hw = new HtmlTextWriter(sw); GridView[] gvExcel = new GridView[] { gvAnual, gvPorUF, gvPorFarmacia, gvPorMunicipio, gvPorPV, gvPorCNPJ }; for (int i = 0; i < gvExcel.Length; i++) { GridView gv = gvExcel[i]; // // Need to redirect to each sheet here? // gvExcel[i].HeaderRow.BackColor = Color.White; gvExcel[i].UseAccessibleHeader = false; gvExcel[i].AllowPaging = false; for (int x = 0; x < gvExcel[i].Columns.Count; x++) { gvExcel[i].Columns[x].Visible = true; } gvExcel[i].DataBind(); foreach (TableCell cell in gvExcel[i].HeaderRow.Cells) { cell.BackColor = Color.CadetBlue; cell.Enabled = false; } foreach (GridViewRow row in gvExcel[i].Rows) { row.BackColor = Color.White; foreach (TableCell cell in row.Cells) { cell.Controls.Clear(); if (row.RowIndex % 2 == 0) { cell.BackColor = Color.White; } else { cell.BackColor = Color.LightBlue; } cell.CssClass = "textmode"; } } gvExcel[i].RenderControl(hw); } //style to format numbers to string string style = @"<style> .textmode { } </style>"; Response.Write(style); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End(); } } 

我跟着maniak1982评论,发现了一个很好的解决scheme。

所以,如果你需要多个gridview来多个工作表,使用.NET,你将需要下载ClosedXML和DocumentFormat.OpenXml.dll 。

引用该dll后,请使用以下代码:

  protected void btExcel_Click(object sender, EventArgs e) { XLWorkbook wb = new XLWorkbook(); GridView[] gvExcel = new GridView[] { GridView1, GridView2, GridView3, GridView4, GridView5, GridView6}; string[] name = new string[] { "Name1", "Name2", "Name3", "Name4", "Name5", "Name6" }; for (int i = 0; i < gvExcel.Length; i++) { if (gvExcel[i].Visible) { gvExcel[i].AllowPaging = false; gvExcel[i].DataBind(); DataTable dt = new DataTable(name[i].ToString()); for (int z = 0; z < gvExcel[i].Columns.Count; z++) { dt.Columns.Add(gvExcel[i].Columns[z].HeaderText); } foreach (GridViewRow row in gvExcel[i].Rows) { dt.Rows.Add(); for (int c = 0; c < row.Cells.Count; c++) { dt.Rows[dt.Rows.Count - 1][c] = row.Cells[c].Text; } } wb.Worksheets.Add(dt); gvExcel[i].AllowPaging = true; } } Response.Clear(); Response.Buffer = true; Response.Charset = ""; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment;filename=Workbook_Name.xlsx"); using (MemoryStream MyMemoryStream = new MemoryStream()) { wb.SaveAs(MyMemoryStream); MyMemoryStream.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); } } 

花了我几天的时间寻找…但它的工作完美。 要开心