Gridview数据导出到ExcelWord 防止出现乱码

时间:2021-09-20 10:19:14

1、页面中添加绿色字体代码
<%@ Page Language="C#" CodeFile="111.aspx.cs" Inherits="111" EnableEventValidation="false" %>
2、类文件中的方法/// <summary>

/// 导出excel按钮

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

protected void lbToExcel_Click(object sender, EventArgs e)

{

//注:gvData为Gridview控件的名称

gvData.AllowPaging = false;

gvData.DataBind();

//导出文件的文件名

var fileName = string.Format("{0:yyyyMMddHHmmss}", DateTime.Now);

//导出的具体实现逻辑

ExportControl(gvData, "Excel", fileName);

gvData.AllowPaging = true;

gvData.Columns[0].Visible = true;

}

/// <summary>

/// 将Web控件或页面信息导出(带文件名参数)

/// </summary>

/// <param name="source">控件实例</param>

/// <param name="DocumentType">导出类型:Excel或Word</param>

/// <param name="filename">保存文件名</param>

public void ExportControl(System.Web.UI.Control source, string DocumentType, string filename)

{

//设置Http的头信息,编码格式

if (DocumentType == "Excel")

{

//防止出现乱码,加上这行可以防止在只有一行数据时出现乱码Gridview数据导出到Excel/Word <wbr>防止出现乱码

HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");

//Excel

HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename + ".xls", System.Text.Encoding.UTF8));

HttpContext.Current.Response.ContentType = "application/ms-excel";

}

else if (DocumentType == "Word")

{

//防止出现乱码,加上这行可以防止在只有一行数据时出现乱码Gridview数据导出到Excel/Word <wbr>防止出现乱码

HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");

//Word

HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename + ".doc", System.Text.Encoding.UTF8));

HttpContext.Current.Response.ContentType = "application/ms-word";

}

HttpContext.Current.Response.Charset = "UTF-8";

HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;

//关闭控件的视图状态

source.Page.EnableViewState = false;

//初始化HtmlWriter

System.IO.StringWriter writer = new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);

source.RenderControl(htmlWriter);

//输出

HttpContext.Current.Response.Write(writer.ToString());

HttpContext.Current.Response.End();

}

//重写一个方法,必须加上次方法

public override void VerifyRenderingInServerForm(Control control)

{

//base.VerifyRenderingInServerForm(control);

}