2

から Excel にエクスポートしようとしていますGridView

以下は私のコードです:

 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 で生成されたテーブルで、数値が 10 進数形式で表示されないことです。

たとえば、123.45 はそのまま表示されますが、123.00 は 123 として表示されます。これらの値に .00 を適用したいと考えています。また、3 列目と 4 列目のみに適用したいと考えています。

GridView の値は希望どおりですが、Excel へのエクスポート中に上記の問題のみが発生しています。

誰かが私に可能な解決策を提案できますか? ありがとうございました。

:上記のコードではExcelGridView.RenderControl(htw); は GridView のコードで、ExcelGridViewは GridView の名前です。

4

1 に答える 1

2

C# から Excel を作成するための EPPlus ライブラリを試してください。

http://epplus.codeplex.com/

このライブラリを使用すると、セル形式を数値として設定し、小数点と桁区切り記号を使用できます。

StringBuilder を使用してみてください (カスタム形式が機能します):

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";
    StringBuilder sb = new StringBuilder();
    sb.Append("<font size=6>COMPANY<font>");
    sb.Append("</br>");
    ExcelGridView.HeaderStyle.BackColor = Color.Orange;
    ExcelGridView.RenderControl(htw);
    ExcelGridView.Rows[2].
    sb.Append("<table border=1 bgcolor=#DBA901>");
    sb.Append("<tr >");
    sb.Append("<td>");
    sb.Append("Total");
    sb.Append("</td>");
    sb.Append("<td colspan=1>");
    sb.Append(totalQ);
    sb.Append("</td>");
    sb.Append("<td>");
    sb.Append("</td>");
    sb.Append("<td  style=mso-number-format:.00>");
    sb.Append(totalP);
    sb.Append("</td>");
    sb.Append("</tr>");
    sb.Append("<table>");

    byte[] byteArray = Encoding.ASCII.GetBytes(sb.ToString());
    MemoryStream s = new MemoryStream(byteArray);
    StreamReader sr = new StreamReader(s, Encoding.ASCII);
    curContext.Response.Write(sr.ReadToEnd());

    curContext.Response.End();
}
于 2012-11-06T08:19:52.967 に答える