打开Excel应用程序客户端

时间:2011-01-03 17:21:11

标签: c# asp.net excel com interop

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

如何在客户端的计算机上创建Excel应用程序?

3 个答案:

答案 0 :(得分:3)

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

像这样......

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[]形式输出的。

请注意,这并不会强制excel打开或类似的东西,它只是以最佳格式向客户端呈现内容,以便客户端在excel中打开它。用户必须单击“打开”,如果他们安装了excel,它将是打开文件的默认应用程序。

如果客户端没有excel,或者他们的mime类型没有映射等,那么它将不起作用。如果没有一些疯狂的activex voodoo(我不推荐),你将无法“为他们打开excel”。

答案 1 :(得分:2)

请勿使用COM INTEROP !!!

有一种更好的方式:EPPlus

在服务器上打开excel时,它会保留excel的副本。可怕。 EPPlus将允许您使用图表和所有内容创建本机excel 2007/2010工作表。并且没有在服务器本身安装办公室。我们正在使用它,非常漂亮。

如果客户没有excel 2007或更高版本,他们可以下载compatibility pack from microsoft.

答案 2 :(得分:0)

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

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

更简单,更安全的方法是创建CSV文件,并通过标准http发送。用户可以在Excel中打开它。对于单个数据工作表来说没问题,但对于带有宏,格式化等的复杂事物则不行。