2019年2月12日 星期二

[C# ASP.NET]將網頁內容直接輸出成EXCEL檔案

這方法其實最後輸出的是附檔名為xls的 HTML檔案
但只要經過 EXCEL另存新檔方式就可以確實轉成xls檔案

而好處是既然原本就屬於 HTML檔案,那自然代表可以利用CSS來美化格式

範例方法:
private void RenderHTML()
{         
     //清空輸出
     Response.Clear();
     Response.Buffer = true;
     //設定 MIME的格式
     Response.ContentType = "application/vnd.ms-excel";
     Response.Charset = "utf-8";

     //<head>部分
     //讓瀏覽器跳出詢問視窗, 並指定檔名
     Response.AddHeader("Content-disposition", "attachment;filename=TempFile.xls");
       
     //<meta>部分 定義語系編碼
     string StrMeta = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>";

     //<style>部分
     //這邊可以直接加入CSS程式碼, 亦或是如下抓取CSS檔案內容來輸出
     FileInfo FileCSS = new FileInfo(Path.Combine(Server.MapPath("./"),"Styles/FileCSS.css"));

     //讀取CSS檔資料,並寫入字串--------------------------------
     StreamReader sr = FileCSS.OpenText();
     StringBuilder sb = new StringBuilder();

     while (sr.Peek() >=0)
     {
          sb.Append(sr.ReadLine());
     }
     sr.Close();
     //---------------------------------------------------------------------

     //<body>部分
     StringWriter sw = new StringWriter();
     //將 sw 設為來呈現HTML標記內容的主體
     HtmlTextWriter HW = new HtmlTextWriter(sw);

     //這邊放想要顯現的內容-------------------------------------
     //ex:放 GridView 來顯示表格資料
     GridView Grd1 = new GridView();
     DataTable DT1 = new DataTable();

     DT1.Columns.Add("水果");
     DT1.Columns.Add("價格");
     DT1.Rows.Add(new object[] { "蘋果", "100" });

     Grd1.DataSource = DT1;
     Grd1.DataBind();
   
     //指定CSS格式
     Grd1.CssClass = "GrdStyle1";
     //將類別(控制項)輸出到 HtmlTextWriter 物件上
     Grd1.RenderControl(HW);   
     //-------------------------------------------------------------------

     //開始輸出 HTML 內容
     Response.Write("<html> <head>" + StrMeta + " <style type ='text/css' Charset='utf-8'>" + sb.ToString() + "</style> </head> <body>" + sw.ToString() + "</body> </html>");
     Response.Flush();
     Response.Close();
     Response.End();
}

沒有留言:

張貼留言