ASP.NET MVC - 實作匯出 CSV 檔功能

摘要: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時的中文編碼問題補遺