使用getJSON返回Excel电子表格

所以我有这个方法:

public Microsoft.Office.Interop.Excel.Worksheet createDoc() { try { app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = true; workbook = app.Workbooks.Add(1); worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1]; } catch (Exception e) { Console.Write("Error"); } finally { } return worksheet; } 

我需要能够返回此工作表,并将其附加到我的观点中的HTML IFRAME。 我在Visual Studio中使用MVC4。 这里是我一直使用的代码来获得JSONResults,但我从来没有处理这个。

  $.getJSON("/exceldocumentmethod", function (results) { }); 

有什么build议?

你不应该使用JSON。 您应该有一个控制器操作,将Excel文件直接返回到具有正确Content-Type和Content-Disposition标头的响应。 然后将iframesrc指向此控制器操作。 不要使用任何$.getJSON方法,它们不会帮助你。

所以例如,你可以有以下的iframe:

 <iframe src="@Url.Action("ExcelDoc", "Home")"></iframe> 

你的ExcelDoc动作可能如下所示:

 public ActionResult ExcelDoc() { var doc = Server.MapPath("~/App_Data/example.xls"); return File(doc, "application/vnd.ms-excel"); } 

对于Excel2007及以上的.xlsx文件,正确的Content-Type是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

另外我注意到,您正在使用Excel Interop在服务器上dynamic生成文档。 这个librrary依赖于在服务器上安装的Excel,而不是被devise用于Web应用程序(服务器环境)。 不要使用它。 如果要在服务器上dynamic生成Excel文件,则可以使用Open XML SDK 。 下面是example on MSDN的一个example on MSDN你如何使用这个SDK生成一个Excel电子表格。