web-dev-qa-db-ja.com

ASP.NETを使用してHTMLテーブルをExcelにエクスポートする

Htmlテーブル(Gridviewではない)があり、適切なヘッダーと行がありません。代わりに、構造とデータがカスタマイズされています。このテーブルをExcelにエクスポートします。 ASP.NETを使用してどうすればよいですか? enter image description here

ラベルは固定テキストであり、整数値はデータベースから取得されます。したがって、テーブル構造は整数/小数値のみが変更されます。

13
hotcoder

ASP.NETを使用して、HTMLテーブル(Gridviewではなく)のカスタマイズされた構造とデータをExcelにエクスポートします。

次のアプローチを試してください

  1. IDを指定し、runat="server"属性を追加します

    <table id="tbl" runat="server" >

  2. 次のコードを追加します

    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();
    
9
Arun Singh

以下のコードを使用できます:

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に表示されません。

4
user3215480

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形式を使用すると、先行ゼロが回避されませんが、テキストを文字列に変換するため、操作を行うことはお勧めできません。

1
Deepak Kothari

自動化された方法はありません。ただし、同じコードを使用してテーブルを作成し、代わりに出力に書き込むことができます。単純なCSVファイルとして記述した場合、ユーザーはダウンロードしたファイルをクリックするだけでExcelにロードできます。

正しいヘッダーを設定することにより、Webページではなくダウンロードとしてコンテンツを扱うようにブラウザーに指示できます。 この記事 でこれを行うためのコードを投稿しました。

0
Jonathan Wood

データがデータベース化されている場合(XMLファイルに保存できない場合)、最近投稿した同様の質問を見てください。

DataReader行をExcelファイルに書き込む

0
IrishChieftain