我正在尝试使用COM互操作程序集将一些数据导出到ASP.NET Web应用程序的Excel工作簿。这在开发中工作正常,因为服务器和客户端是同一台机器。但是,部署时,情况并非如此。部署的版本不会抛出异常,但它也不会在本地计算机上打开Excel(因为ASP.NET在服务器端执行,这很明显)。
如何在客户端的计算机上创建Excel应用程序?
答案 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中打开它。对于单个数据工作表来说没问题,但对于带有宏,格式化等的复杂事物则不行。