您的位置:首页 > 其它

DataTable转Excel并对0开头的数值保留0显示

2016-04-15 17:22 309 查看
在一般的asp.net导出Excel中都会把数字前的0默认去掉,此方法有效解决这问题。

下面是具体方法:

#region DataTable导出到Excel

/// <summary>

/// DataTable导出到Excel

/// </summary>

/// <param name="pData">DataTable</param>

/// <param name="pFileName">导出文件名</param>

public static void DataTableExcel(System.Data.DataTable pData, string pFileName)

{

// 当前对话

System.Web.HttpContext curContext = System.Web.HttpContext.Current;

if (pData != null)

{

string UserAgent = curContext.Request.ServerVariables["http_user_agent"].ToLower();

if (UserAgent.IndexOf("firefox") == -1)//火狐浏览器

pFileName = System.Web.HttpUtility.UrlEncode(pFileName, System.Text.Encoding.UTF8);

curContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + pFileName + ".xls");

curContext.Response.ContentType = "application/vnd.ms-excel";

StringBuilder TableSB = new StringBuilder();

#region 标题头

string strHeader = "<table border=\"1\" style=\"background-color:Gray;font-weight:bold;\"><tr>";

for (int i = 0; i < pData.Columns.Count; i++)

{

strHeader += "<td>" + pData.Columns[i].ColumnName + "</td>";

}

strHeader += "</tr></table>";

#endregion

TableSB.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");

foreach (DataRow orow in pData.Rows) {

TableSB.Append("<tr>");

for (int i = 0; i < pData.Columns.Count; i++)

{

if (orow[i].ToString().StartsWith("0") && !orow[i].ToString().StartsWith("0."))

TableSB.Append(string.Format("<td style='mso-number-format:general;mso-number-format:\"{1}\"'>{0}</td>", orow[i].ToString(), @"\@"));

else

TableSB.Append("<td >" + orow[i].ToString() + "</td>");

}

TableSB.Append("</tr>");

}

TableSB.Append("</table>");

string strMeta = "<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=UTF-8\"/>";

curContext.Response.Write(strMeta + strHeader + TableSB.ToString());

curContext.Response.End();

}

}

#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: