Htmlテーブル(Gridviewではない)があり、適切なヘッダーと行がありません。代わりに、構造とデータがカスタマイズされています。このテーブルをExcelにエクスポートします。 ASP.NETを使用してどうすればよいですか?
ラベルは固定テキストであり、整数値はデータベースから取得されます。したがって、テーブル構造は整数/小数値のみが変更されます。
ASP.NETを使用して、HTMLテーブル(Gridviewではなく)のカスタマイズされた構造とデータをExcelにエクスポートします。
次のアプローチを試してください
ID
を指定し、runat="server"
属性を追加します
<table id="tbl" runat="server" >
次のコードを追加します
Response.ContentType = "application/x-msexcel";
Response.AddHeader("Content-Disposition", "attachment;
filename=ExcelFile.xls");
Response.ContentEncoding = Encoding.UTF8;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
tbl.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
以下のコードを使用できます:
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=Print.xls");
Response.Write("<html xmlns:x=\"urn:schemas-Microsoft-com:office:Excel\">");
Response.Write("<head>");
Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf- 8\">");
Response.Write("<!--[if gte mso 9]><xml>");
Response.Write("<x:ExcelWorkbook>");
Response.Write("<x:ExcelWorksheets>");
Response.Write("<x:ExcelWorksheet>");
Response.Write("<x:Name>Report Data</x:Name>");
Response.Write("<x:WorksheetOptions>");
Response.Write("<x:Print>");
Response.Write("<x:ValidPrinterInfo/>");
Response.Write("</x:Print>");
Response.Write("</x:WorksheetOptions>");
Response.Write("</x:ExcelWorksheet>");
Response.Write("</x:ExcelWorksheets>");
Response.Write("</x:ExcelWorkbook>");
Response.Write("</xml>");
Response.Write("<![endif]--> ");
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
tbl.RenderControl(hw);
Response.Write(tw.ToString());
Response.Write("</head>");
Response.flush();
また、エクスポートされた出力がUIとまったく同じに見えるようにする場合は、インラインcssを指定することをお勧めします。 cssクラスをテーブルに適用すると、エクスポートされたExcelに表示されません。
DtReportにテーブル(つまり、エクスポートするデータ)が含まれている場合、次のLOCを使用してテーブルをExcelにエクスポートし、ヘッダーをフォーマットすることもできます。
if (dtReports != null && dtReports.Rows.Count > 0 && !string.IsNullOrEmpty(formName))
{
string filename = formName.ToUpper() + ParsConstant.XLS_EXTENSION;
StringWriter tw = new StringWriter();
using (HtmlTextWriter hw = new HtmlTextWriter(tw))
{
//Binding Datatable to DataGrid.
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dtReports;
dgGrid.DataBind();
//Some Properties for the Header
dgGrid.HeaderStyle.Font.Bold = true;
dgGrid.HeaderStyle.Font.Size = 13;
//Get the HTML for the control.
dgGrid.RenderControl(hw);
Response.ContentType = "application/vnd.ms-Excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
//Response.Write("<style> TD { mso-number-format:\\@; } </style>");
Response.Write(tw.ToString());
Response.End();
}
}
mSO形式を使用すると、先行ゼロが回避されませんが、テキストを文字列に変換するため、操作を行うことはお勧めできません。
自動化された方法はありません。ただし、同じコードを使用してテーブルを作成し、代わりに出力に書き込むことができます。単純なCSVファイルとして記述した場合、ユーザーはダウンロードしたファイルをクリックするだけでExcelにロードできます。
正しいヘッダーを設定することにより、Webページではなくダウンロードとしてコンテンツを扱うようにブラウザーに指示できます。 この記事 でこれを行うためのコードを投稿しました。
データがデータベース化されている場合(XMLファイルに保存できない場合)、最近投稿した同様の質問を見てください。