asp.Netクライアントexcelのエクスポート


完璧なシステムにとって、エクスポート機能は欠かせません.ここでは、WebプロジェクトがクライアントでExcelをどのようにエクスポートするかを共有します.
次に、関数コードをエクスポートします.
#region       Excel
/// <summary>
///  DataTable     excel      
/// </summary>
/// <param name="dtData">    DataTable</param>
/// <param name="strFileName">  Excel    </param>
public static void DataTableToExcel(System.Data.DataTable dtData, string strFileName)
{
    System.Web.UI.WebControls.DataGrid dgExport = null;
    //     
    System.Web.HttpContext curContext = System.Web.HttpContext.Current;
    // IO       excel  
    System.IO.StringWriter strWriter = null;

    System.Web.UI.HtmlTextWriter htmlWriter = null;

    if (dtData != null)
    {
        curContext.Response.ClearContent();
        curContext.Response.Buffer = true;
        curContext.Response.Write("<metahttp-equiv=Content-Type content=text/html;charset=UTF-8>");
        curContext.Response.ContentType = "application/excel";

        //       
        curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + strFileName);
        curContext.Response.Charset = "UTF8";

        //   excel  
        strWriter = new System.IO.StringWriter();
        htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);

        //     dgData           ,            DataGrid
        dgExport = new System.Web.UI.WebControls.DataGrid();
        dgExport.DataSource = dtData.DefaultView;
        dgExport.AllowPaging = false;
        dgExport.DataBind();

        //      
        dgExport.RenderControl(htmlWriter);
        curContext.Response.Write(strWriter.ToString());
        curContext.Response.End();
    }
}
#endregion
この関数コードを呼び出します.
TableToExcel.DataTableToExcel(dtTeacherExpScore, Server.UrlEncode("      " + ".xls"));
注意:漢字ファイル名は必ずServerを使用する.UrlEncode
関数をエンコードします.そうしないと、文字化けしてしまいます.
これでクライアントはExcelをエクスポートできます.しかし、「0」で始まる数字の文字列を書き出そうとすると、書き出されたExcelでは、書き出しの「0」が謎の行方不明になっていることがわかりました.例えば、01234、Excelでは1234と表示されています.この時、私はやっとこの方法がまだ完璧ではないことに気づいた.
もともと、「0」が謎の失踪を起こしたのは、Excelのセルの表示方法に問題があった.問題の所在を知ったら、2行のコードを追加すれば、この問題を完璧に解決することができます.
最終的なエクスポートコードは次のとおりです.
#region       Excel
/// <summary>
///  DataTable     excel      
/// </summary>
/// <param name="dtData">    DataTable</param>
/// <param name="strFileName">  Excel    </param>
public static void DataTableToExcel(System.Data.DataTable dtData, string strFileName)
{
    System.Web.UI.WebControls.DataGrid dgExport = null;
    //     
    System.Web.HttpContext curContext = System.Web.HttpContext.Current;
    // IO       excel  
    System.IO.StringWriter strWriter = null;

    System.Web.UI.HtmlTextWriter htmlWriter = null;

    if (dtData != null)
    {
        curContext.Response.ClearContent();
        curContext.Response.Buffer = true;
        curContext.Response.Write("<metahttp-equiv=Content-Type content=text/html;charset=UTF-8>");
        curContext.Response.ContentType = "application/excel";

                

        //       
        curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + strFileName);
        curContext.Response.Charset = "UTF8";

        //   excel  
        strWriter = new System.IO.StringWriter();
        htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);

        //     dgData           ,            DataGrid
        dgExport = new System.Web.UI.WebControls.DataGrid();
        dgExport.DataSource = dtData.DefaultView;
        dgExport.AllowPaging = false;
        dgExport.DataBind();

        //       
        string strStyle = "<style>td{mso-number-format:\"\\@\";}</style>";
        //    excel        ,        :   0111,    111
        strWriter.WriteLine(strStyle);

        //      
        dgExport.RenderControl(htmlWriter);
        curContext.Response.Write(strWriter.ToString());
        curContext.Response.End();
    }
}
#endregion