62,046
社区成员
发帖
与我相关
我的任务
分享
#region 把datagrid导出到excel方法:
public void CreateExcel(DataSet ds, string FileName)
{
System.Web.UI.WebControls.DataGrid dgExport = null;
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null;
DataTable dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
string temp = dt.Rows[i][j].ToString();
bool flag = false;
while (temp.IndexOf("\n") != -1)
{
temp = temp.Replace("\n", " <br> ");
flag = true;
}
if (flag)
dt.Rows[i][j] = temp;
}
}
if (dt != null)
{
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = System.Text.Encoding.Default;
curContext.Response.Charset = "gb2312";
curContext.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>");
curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
//curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
curContext.Response.AppendHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
// 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid
dgExport = new System.Web.UI.WebControls.DataGrid();
dgExport.DataSource = dt.DefaultView;
dgExport.AllowPaging = false;
dgExport.DataBind();
// 返回客户端
dgExport.RenderControl(htmlWriter);
curContext.Response.Write(strWriter.ToString());
curContext.Response.End();
}
}
#endregion
//文本:vnd.ms-excel.numberformat:@
//日期:vnd.ms-excel.numberformat:yyyy/mm/dd
//数字:vnd.ms-excel.numberformat::#,##0.00
//货币:vnd.ms-excel.numberformat¥#,##0.00
//百分比:vnd.ms-excel.numberformat:#0.00%
//在excel中数字位数大于11位,都回默认以科学技术法出现,所以有E+.
protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.EditItem)
{
//表示datagrid的第10列和第25列以字符串的形式输出,你得数一下你的datagrid的第几列是以科学技术法出现的,然后你在写在下面的方法.
e.Item.Cells[10].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
e.Item.Cells[25].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
}
else if (e.Item.ItemType == ListItemType.Footer)
{
}
}
//如果你想对导出的execl的某一行进行以字符串输出,而不想用科学计数法出现,则需要上面方法,最好对某一列以字符串输出.
//文本:vnd.ms-excel.numberformat:@
//日期:vnd.ms-excel.numberformat:yyyy/mm/dd
//数字:vnd.ms-excel.numberformat::#,##0.00
//货币:vnd.ms-excel.numberformat¥#,##0.00
//百分比:vnd.ms-excel.numberformat:#0.00%
//在excel中数字位数大于11位,都回默认以科学技术法出现,所以有E+.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
for(int i=0;i<e.Row.Cells.Count;i++)
{
if(e.Row.RowType==DataControlRowType.DataRow)
{
//表示对每一行以字符串的形式输出
e.Row.Cells[i].Attributes.Add("style","vnd.ms-excel.numberformat:@");
}
}
}
//如果你想对导出的execl的某一行进行以字符串输出,而不想用科学计数法出现,则需要上面方法,最好对某一列以字符串输出,excel也是从0列开始的.
//文本:vnd.ms-excel.numberformat:@
//日期:vnd.ms-excel.numberformat:yyyy/mm/dd
//数字:vnd.ms-excel.numberformat::#,##0.00
//货币:vnd.ms-excel.numberformat¥#,##0.00
//百分比:vnd.ms-excel.numberformat:#0.00%
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
for(int i=0;i<e.Row.Cells.Count;i++)
{
if(e.Row.RowType==DataControlRowType.DataRow)
{
e.Row.Cells[i].Attributes.Add("style","vnd.ms-excel.numberformat:@");
}
}
}