public ActionResult Download(string keyword, string catego) { //ClosedXML的用法 先new一個Excel Workbook using (XLWorkbook wb = new XLWorkbook()) { //取得我要塞入Excel內的資料 var data = repo.GetList(keyword, catego).Select(c => new { c.Id, c.客戶名稱, c.統一編號, c.電話, c.傳真, c.地址, c.Email, c.客戶分類 }); //一個wrokbook內至少會有一個worksheet,並將資料Insert至這個位於A1這個位置上 var ws = wb.Worksheets.Add("sheet1", 1); //注意官方文件上說明,如果是要塞入Query後的資料該資料一定要變成是data.AsEnumerable() //但是我查詢出來的資料剛好是IQueryable ,其中IQueryable有繼承IEnumerable 所以不需要特別寫 ws.Cell(1, 1).InsertData(data); //因為是用Query的方式,這個地方要用串流的方式來存檔 using (MemoryStream memoryStream = new MemoryStream()) { wb.SaveAs(memoryStream); //請注意 一定要加入這行,不然Excel會是空檔 memoryStream.Seek(0, SeekOrigin.Begin); //注意Excel的ContentType,是要用這個"application/vnd.ms-excel" 不曉得為什麼網路上有的Excel ContentType超長,xlsx會錯 xls反而不會 return(this.File(memoryStream.ToArray(), "application/vnd.ms-excel", "Download.xlsx")); } } }