简体   繁体   中英

Exporting Gridview to excel without gridlines

I use this code to export datagridview to excel

HtmlForm form = new HtmlForm();
Response.Clear();
Response.Buffer = true;
string fileName = "TRAIL" + "[" + DatefromTxtBox.Text.Replace("/", "") + "_" + DatetoTxtBox.Text.Replace("/", "") + "]" + ".xls";
Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
AuditTrailGV.AllowPaging = false;
AuditTrailGV.DataSource = (DataSet)ViewState["audit"];
AuditTrailGV.DataBind();
form.Controls.Add(AuditTrailGV);
this.Controls.Add(form);
form.RenderControl(hw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

the problem is this code also catches the formatting/borders of my gridview

here are the sample screen shots

This is my gridview in asp.net 在此处输入图片说明

and this is what appears in my excell 在此处输入图片说明

as you can see it transformed all of the lines like the gridview, i do not want it to happen, as much as possible if i can only retain the gridlines for the rows with data only, if its not possible, remove all the gridlines..

any help? i really do not like those gridlines in my excell

VB

Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    'base.VerifyRenderingInServerForm(control);
    'This remains empty
End Sub

Protected Sub btnExcel_Click(sender As Object, e As ImageClickEventArgs) Handles btnExcel.Click

    Response.Clear()
    Response.AddHeader("content-disposition", "attachment;filename=FileName.xls")
    Response.Charset = ""
    Response.Cache.SetCacheability(HttpCacheability.NoCache)
    Response.ContentType = "application/vnd.ms-excel"

    Dim stringWrite As New System.IO.StringWriter()
    Dim htmlWrite As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(stringWrite)

    htmlWrite.Write("<html xmlns:o=""urn:schemas-microsoft-com:office:office"" ")
    htmlWrite.Write("xmlns:x=""urn:schemas-microsoft-com:office:excel"" ")
    htmlWrite.Write("xmlns=""http://www.w3.org/TR/REC-html40""> ")
    htmlWrite.Write("<head> ")
    htmlWrite.Write("<!--[if gte mso 9]><xml> ")
    htmlWrite.Write("<x:ExcelWorkbook> ")
    htmlWrite.Write("<x:ExcelWorksheets> ")
    htmlWrite.Write("<x:ExcelWorksheet> ")
    htmlWrite.Write("<x:Name>Sheet1</x:Name> ")
    htmlWrite.Write("<x:WorksheetOptions> ")
    htmlWrite.Write("<x:Selected/> ")
    htmlWrite.Write("<x:ProtectContents>False</x:ProtectContents> ")
    htmlWrite.Write("<x:ProtectObjects>False</x:ProtectObjects> ")
    htmlWrite.Write("<x:ProtectScenarios>False</x:ProtectScenarios> ")
    htmlWrite.Write("</x:WorksheetOptions> ")
    htmlWrite.Write("</x:ExcelWorksheet> ")
    htmlWrite.Write("</x:ExcelWorksheets> ")
    htmlWrite.Write("</x:ExcelWorkbook> ")
    htmlWrite.Write("</xml><![endif]--> ")
    htmlWrite.Write("</head>")
    htmlWrite.WriteLine("")

    gridView.HeaderStyle.Reset()
    gridView.FooterStyle.Reset()
    gridView.AlternatingRowStyle.Reset()
    gridView.RowStyle.Reset()

    gridView.BackColor = Color.Transparent
    gridView.GridLines = GridLines.None
    gridView.RenderControl(htmlWrite)

    Response.Write(stringWrite.ToString())
    Response.[End]()
End Sub

C#

public override void VerifyRenderingInServerForm(Control control)
{
    //base.VerifyRenderingInServerForm(control);
    //This remains empty
}


protected void btnExcel_Click(object sender, ImageClickEventArgs e)
{
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/vnd.ms-excel";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

    htmlWrite.Write("<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" ");
    htmlWrite.Write("xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ");
    htmlWrite.Write("xmlns=\"http://www.w3.org/TR/REC-html40\"> ");
    htmlWrite.Write("<head> ");
    htmlWrite.Write("<!--[if gte mso 9]><xml> ");
    htmlWrite.Write("<x:ExcelWorkbook> ");
    htmlWrite.Write("<x:ExcelWorksheets> ");
    htmlWrite.Write("<x:ExcelWorksheet> ");
    htmlWrite.Write("<x:Name>Sheet1</x:Name> ");
    htmlWrite.Write("<x:WorksheetOptions> ");
    htmlWrite.Write("<x:Selected/> ");
    htmlWrite.Write("<x:ProtectContents>False</x:ProtectContents> ");
    htmlWrite.Write("<x:ProtectObjects>False</x:ProtectObjects> ");
    htmlWrite.Write("<x:ProtectScenarios>False</x:ProtectScenarios> ");
    htmlWrite.Write("</x:WorksheetOptions> ");
    htmlWrite.Write("</x:ExcelWorksheet> ");
    htmlWrite.Write("</x:ExcelWorksheets> ");
    htmlWrite.Write("</x:ExcelWorkbook> ");
    htmlWrite.Write("</xml><![endif]--> ");
    htmlWrite.Write("</head>");
    htmlWrite.WriteLine("");

    gridView.HeaderStyle.Reset();
    gridView.FooterStyle.Reset();
    gridView.AlternatingRowStyle.Reset();
    gridView.RowStyle.Reset();

    gridView.BackColor = Color.Transparent;
    gridView.GridLines = GridLines.None;
    gridView.RenderControl(htmlWrite);

    Response.Write(stringWrite.ToString());
    Response.End();

}

You can try below code and custom the color of the downloaded data. It will also not color the Column and rows other then the data.

protected void DownloadExcel_Click(object sender, EventArgs e)
{
    Response.ClearContent();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Report.xls"));
    Response.ContentType = "application/ms-excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    GridView1.AllowPaging = false;
    GridView1.DataBind();
    GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF");

    for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++)
    {
        GridView1.HeaderRow.Cells[i].Style.Add("background-color", "#bfc2c7");
    }

    int j = 1;
    foreach (GridViewRow gvrow in GridView1.Rows)
    {           
        //gvrow.BackColor = color.White;
        if (j <= GridView1.Rows.Count)
        {
            if (j % 2 != 0)
            {
                for (int k = 0; k < gvrow.Cells.Count; k++)
                {
                    gvrow.Cells[k].Style.Add("background-color", "#EFF3FB");    
                }
            }
        }
        j++;
    }
    GridView1.RenderControl(htw);
    Response.Write(sw.ToString());
    Response.End();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM