【问题标题】:Opening an Excel application client-side打开 Excel 应用程序客户端
【发布时间】:2011-06-02 23:11:22
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net excel com interop


    【解决方案1】:

    您需要在服务器端生成 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 巫术(我不推荐),您将无法“为他们打开 excel”。

    【讨论】:

    • 附注,COM 与 office DLL 的互操作是在服务器上生成 excel 文件的一种非常糟糕的方法。此外,无论如何,Office 并没有真正获得该用途的许可。我强烈推荐使用 NPOI 或 ExcelLibrary 等库来生成文件。
    【解决方案2】:

    不要使用 COM 互操作!!!

    还有一个更好的方法:EPPlus

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

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

    【讨论】:

    • 我考虑过使用开源库。 COM 互操作的好处在于,如果您熟悉编写 Excel 宏,那么它很容易使用。是否可以假设 EPPlus 也同样易于使用?
    • @Tyler 仅许可问题就应该阻止您在服务器上将 COM Interop 与 office 一起使用,这甚至不涉及 Chris 上面提到的性能问题。是的,你可能需要学习一个不同的库来制作你的文件,但这就是你需要做的事情来保持它的清晰。
    • @Brook:我知道互操作不是最好的解决方案。在这一点上,我只是想知道最好的第三方 API 是什么。
    • @Tyler:这将取决于您的要求。如果您要动态生成宏,您可能必须购买一些商业产品。 EPPlus 可以使用带有宏的文件作为模板,但它不允许您操作它们。我知道的其他开源库,如 ExcelLibrary 或 NPOI 也是如此。如果您同意强制用户使用 2007 兼容包,那么 EPPlus 是最强大的。如果没有,我喜欢 ExcelLibrary,它非常简单轻量。
    • 谢谢,我会试试 EPPlus。
    【解决方案3】:

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

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

    一种更简单、更安全的方法是创建一个 CSV 文件,然后通过标准 http 发送它。用户可以在 Excel 中打开它。对于单个数据工作表来说可以,但对于包含宏、格式等的复杂事物则不行。

    【讨论】:

    • 我在这里面临的问题是,我想要多个工作表、格式等。
    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多