在一般的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