如何动态创建excel并在c#中下载?

时间:2014-11-18 18:13:18

标签: c# asp.net excel

我有下面的示例代码,它将创建一个excel文件。 我不想在服务器中保存它。

  if (app == null)
                    return;
                app.Visible = true;
                object loc;

                workbook = app.Workbooks.Add(1);
                workbook.SaveAs("D:\\Sample.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing);

没有保存如何动态下载?

3 个答案:

答案 0 :(得分:4)

您违反了服务器上最基本的Office自动规则 - 不要这样做! Microsoft Office不适用于Web服务器使用的非交互式登录会话。您可能会发现,由于上面的代码不起作用,现在可以正常工作,但Microsoft可以保证随着代码的更改,服务器的配置以及Office产品的更新,您会遇到各种各样的问题。

相反,Office文档应该由许多与Office套件本身没有直接关联的工具之一生成(Office文档自Office 2007以来一直使用OpenXML的开放格式)。这些工具直接生成XML文件和最终存储在xslx文件中的打包元数据。

我通常喜欢使用Microsoft OpenXML SDK,这是一种瑞士军刀。它使用起来很容易,但您可以使用它创建几乎任何Office文档。 http://msdn.microsoft.com/en-us/library/office/bb448854.aspx

如果您要使用OpenXML SDK,那么Open XML SDK Productivity工具是必备工具。 SDK和Productivity Tool都可以下载: http://www.microsoft.com/en-us/download/details.aspx?id=30425

答案 1 :(得分:1)

看看EPPlus我现在正在将它用于多个项目。如果你所做的只是创建excel文件,那么使用OpenXML SDK就可以轻松起来然后再去。

还要看一下这个问题Create Excel (.XLS and .XLSX) file from C#

答案 2 :(得分:0)

您需要使用此代码将文件保存到服务器并下载。

  public void Downloadfile(string sFileName, string sFilePath)
 {
    var file = new System.IO.FileInfo(sFilePath);

    Response.Clear();
    Response.AddHeader("Content-Disposition", "attachment; filename=" + sFileName);
    Response.AddHeader("Content-Length", file.Length.ToString(CultureInfo.InvariantCulture));
    Response.ContentType = "application/octet-stream";
    Response.WriteFile(file.FullName);
    Response.End();
  }