打开Excel应用程序客户端

我正在尝试使用COM互操作程序集将一些数据导出到ASP.NET Web应用程序的Excel工作簿。 由于服务器和客户端是同一台机器,所以在开发中可以正常工作。 但是,部署时,情况并非如此。 部署的版本不会引发exception,但也不会在本地机器上打开Excel(因为ASP.NET在服务器端执行,这是非常明显的)。

如何在客户机上创buildExcel应用程序?

您需要生成excel文件服务器端,然后使用适当的MIMEtypes将字节发送到客户端,以便客户端可以弄清楚如何打开它。

像这样的东西…

HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); HttpContext.Current.Response.ContentType = "application/ms-excel"; HttpContext.Current.Response.BinaryWrite(bytes); 

其中fileName是文件所需的名称,而bytes是来自excel生成器的输出,采用byte[]forms。

请注意,这不会强制开放或类似的东西,它只是以最好的格式向客户端呈现内容,客户端可以在Excel中打开它。 用户将不得不点击“打开”,如果他们安装了excel,它将成为打开文件的默认应用程序。

如果客户端没有excel,或者他们的mimetypes没有被映射等等,那么这是不行的。 如果没有一些疯狂的ActiveX(我不推荐),你将无法“为他们打开excel”。

不要使用COM互联网!

有一个更好的方法: EPPlus

在服务器上打开excel时,会保留一份运行的excel的副本。 可怕。 EPPlus将让您创build本地Excel 2007/2010工作表与图表和一切。 没有办公室安装在服务器本身。 我们正在使用它,非常漂亮。

如果客户端不具有Excel 2007或更高版本,则可以从Microsoft下载兼容包。

听起来像是一个巨大的潜在安全漏洞,如果你问我!

一种方法可能是启动一个ActiveX Excel控件? (ActiveX只是一个COM对象的营销术语)。 我不熟悉ASP.NET,所以我不知道这将如何工作在服务器/客户端的边界。

一个更简单,更安全的方法是创build一个CSV文件,并通过标准的http发送。 用户可以在Excel中打开它。 对于单个数据工作表来说,这样可以,但是对于macros,格式化等复杂的事情来说,这样做不会有问题。