通过点击button将SQL查询的结果保存到Excel文件中

我有一个Asp.Net MVC Web应用程序,其中一个网页链接EXPORT运行一个C#函数,它具有一个SQL查询并将数据导出到Excel文件并保存在本地计算机上。 一旦保存操作完成,它应该返回到pipe理页面,由于某种原因,它不这样做,并返回到一个空的页面

我在控制器中有以下代码

 [Authorize(Roles = "Admin")] public ActionResult ExportWBData() { sqlcon.Open(); string strGetAllWBData = @"select Product, Term, BidVolume, BidCP as BidCounterParty, Bid, Offer, OfferCP as OfferCounterParty, OfferVolume from CanadianCrudes"; SqlCommand cmdGetAllWBData = new SqlCommand(strGetAllWBData, sqlcon); DataTable dtGetAllWBData = new DataTable(); SqlDataAdapter daGetAllWBData = new SqlDataAdapter(); daGetAllWBData.SelectCommand = cmdGetAllWBData; daGetAllWBData.Fill(dtGetAllWBData); sqlcon.Close(); Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); Microsoft.Office.Interop.Excel._Worksheet worksheet = null; worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Sheets["Sheet1"]; worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workbook.ActiveSheet; for (int i = 0; i < dtGetAllWBData.Rows.Count; i++) { for (int j = 0; j < dtGetAllWBData.Columns.Count; j++) { worksheet.Cells[1, j + 1] = dtGetAllWBData.Columns[j].ToString(); worksheet.Cells[i + 2, j + 1] = dtGetAllWBData.Rows[i][j].ToString(); } } string fromFormat = "dd/MM/yyyy"; string toFormat = "MM-dd-yyyy"; DateTime newDate = DateTime.ParseExact(DateTime.Today.ToString(fromFormat), fromFormat, null); string filedate = newDate.ToString(toFormat); workbook.SaveAs(@"Z:\WBDomesticDumps\WBData " + filedate + ".xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); workbook.Close(true, Type.Missing, Type.Missing); app.Quit(); return Admin(); } 

布局页面是

 <li>@Html.ActionLink("Export", "ExportWBData", "Home")</li> 

我可以知道更好的方法吗?

最简单的方法就是创build一个视图来写一个数据的HTML表格。 如果您然后将内容types标头设置为application/vnd.ms-excel那么大多数浏览器会将其识别为excel文件并提示您打开或保存。

这样做的好处在于,您可以使用常规的View模板(razor或其他)来pipe理您的视图逻辑,而您的控制器逻辑变得更加干净。

简单修复replace

return Admin()

 return RedirectToAction("Admin","Home"); 

你的Excelfunction看起来不错。 我相信这个问题是你的回报。

应该更像这样:

 return RedirectToAction("Admin");