【发布时间】:2012-11-06 07:14:42
【问题描述】:
我正在尝试从GridView 导出到 Excel。
下面是我的代码:
public override void ExecuteResult(ControllerContext context)
{
HttpContext curContext = HttpContext.Current;
curContext.Response.Clear();
curContext.Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
curContext.Response.Charset = "";
curContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
curContext.Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
htw.WriteLine("<font size=6>COMPANY<font>");
htw.WriteLine("</br>");
ExcelGridView.HeaderStyle.BackColor = Color.Orange;
ExcelGridView.RenderControl(htw);
ExcelGridView.Rows[2].
htw.WriteLine("<table border=1 bgcolor=#DBA901>");
htw.WriteLine("<tr >");
htw.WriteLine("<td>");
htw.WriteLine("Total");
htw.WriteLine("</td>");
htw.WriteLine("<td colspan=1>");
htw.WriteLine(totalQ);
htw.WriteLine("</td>");
htw.WriteLine("<td>");
htw.WriteLine("</td>");
htw.WriteLine("<td style=mso-number-format:.00>");
htw.WriteLine(totalP);
htw.WriteLine("</td>");
htw.WriteLine("</tr>");
htw.WriteLine("<table>");
byte[] byteArray = Encoding.ASCII.GetBytes(sw.ToString());
MemoryStream s = new MemoryStream(byteArray);
StreamReader sr = new StreamReader(s, Encoding.ASCII);
curContext.Response.Write(sr.ReadToEnd());
curContext.Response.End();
}
我的问题是在 Excel 中生成的表格中,数字不是以十进制格式显示的。
例如 123.45 将按原样显示,但 123.00 将显示为 123。我想在这些值中强制执行 .00。我也只想在第三和第四列强制执行它。
GridView 中的值与我希望的一样,但是在导出到 Excel 时仅发生上述问题。
谁能建议我一个可能的解决方案?谢谢。
注意:上面代码中ExcelGridView.RenderControl(htw);是GridView的代码,ExcelGridView是GridView的名字.
【问题讨论】:
-
我试过你的代码,但用 StringBuilder 代替 HtmlTextWriter 和十进制格式看起来不错。
-
如果您使用字符串生成器,您是否将十进制值设为 123.00 而不是 123?我传递的值也是十进制格式。另外我听说 excel 2010 有小数的格式问题。是真的吗?
-
如果我通过了 123,我在 Excel 中得到了 123.00。如果我通过 123.1,我会在 Excel 中得到 123.10。可以试试吗?
-
嗨,如果我使用你的代码,我会得到空白的 excel。你认为这可能是因为 ExcelGridView.RenderControl(htw);线?因为它是将gridview传递给excel的主线。
标签: c# html styles export-to-excel number-formatting