這方法其實最後輸出的是附檔名為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();
}
沒有留言:
張貼留言