asp.Netクライアントexcelのエクスポート
4147 ワード
完璧なシステムにとって、エクスポート機能は欠かせません.ここでは、WebプロジェクトがクライアントでExcelをどのようにエクスポートするかを共有します.
次に、関数コードをエクスポートします.
関数をエンコードします.そうしないと、文字化けしてしまいます.
これでクライアントは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();
//
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