摘要:ASP.NET MVC - 實作匯出 CSV 檔功能
在 ASP.NET MVC 中,小弟還未實作過匯出 CSV 檔的功能,再加上最近在專案上又恰巧有機會實作,所以特別將實作的程式碼特別記錄下來。
※在 ASP.NET MVC 中,實作匯出 CSV 檔的方式不少,小弟的方式僅提供參考,若有不足之處請各位高手前輩指教...
資料庫資料:
步驟一:建立 LINQ to SQL,並將 使用者資料表 拉進 dbml 當中
步驟二:撰寫匯出 CSV 檔的程式碼
Code:
public ActionResult Index()
{
ViewData["Message"] = "Export CSV Sample";
return View();
}
public ActionResult ExportCSV()
{
MyDataContext db = new MyDataContext();
string strFileName = "UserDataInfo.csv";
//撈取 使用者資料 資料表 資訊
IEnumerable<使用者資料> result = from p in db.使用者資料
select p;
Response.AppendHeader("content-disposition", "attachment;filename=" + strFileName);
Response.ContentType = "application/unkown";
Response.ContentEncoding = Encoding.UTF8;
GenerateCSV(result);
return new EmptyResult();
}
private void GenerateCSV<T>(IEnumerable<T> list)
{
Type t = typeof(T);
//將資料寫到前端
StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.Default);
object o = Activator.CreateInstance(t);
PropertyInfo[] props = o.GetType().GetProperties();
//將資料表的欄位名稱寫出
foreach (PropertyInfo pi in props)
{
sw.Write(pi.Name.ToUpper() + ",");
}
sw.WriteLine();
//將資料表的資料寫出
foreach (T item in list)
{
foreach (PropertyInfo pi in props)
{
string whatToWrite =
Convert.ToString(item.GetType().GetProperty(pi.Name).GetValue(item, null)).Replace(',', ' ') + ',';
sw.Write(whatToWrite);
}
sw.WriteLine();
}
sw.Close();
}
步驟三:撰寫 HTML 的程式碼
Code:
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
<p>
<a href="<%=Url.Action("ExportCSV", "Home")%>">下載 CSV 檔</a>
</p>
</asp:Content>
結果:
參考:
Excel開啟CSV時的中文編碼問題補遺