【问题标题】:Excel hangs when printing the first time from ASP.NET webservice第一次从 ASP.NET Web 服务打印时 Excel 挂起
【发布时间】:2009-05-31 08:03:52
【问题描述】:

我们正在使用 Excel 将 SpreatSheetML 转换为 ASP.NET Web 服务中的 XLS。此外,如果用户选中了正确的复选框,我们会生成一个使用 Excel 打印电子表格的线程。

最近,我们在新环境中部署了应用程序,然后开始出现问题:第一次尝试打印时,Excel 似乎挂在服务器上 - 即调用工作簿上的 PrintOut 方法永远不会回来。

但是如果我们以应用程序池身份登录服务器并打开Excel,向打印机发送一些内容,然后再次关闭它,则打印将从此开始!

我怀疑 Excel 显示 invisible dialog - 症状与我们之前的症状相同,当时 Excel 似乎停止在 Excel 打开时出现的“无法使用对象链接和嵌入”对话框。

我知道使用服务器端 Office 自动化不好,但这是一个很难更改的遗留应用程序,所以请不要只建议我重新设计我们的解决方案。

有没有人遇到过这种行为?

【问题讨论】:

    标签: web-services excel printing asmx com-interop


    【解决方案1】:

    好吧,似乎没有人遇到过这个问题。

    真正奇怪的是,我的夜间工作(普通的 .NET .exe)完全能够打印 - 只有我的网络服务有这个问题。

    所以我通过做我早就应该做的事情解决了这个问题:我用Topshelf 做了一个简单的 Windows 服务,它响应一些 MSMQ 消息并进行打印,然后我的 Web 服务可以订购打印输出通过消息队列。

    各方面都好得多!

    【讨论】:

      【解决方案2】:

      我在使用 Microsoft Excel、Word 和 PowerPoint 通过 Web 服务中的互操作将 Office 文档打印为 PDF 格式时遇到了无穷无尽的问题(性能不佳、进程挂起、进程崩溃等)。我也遇到过一些我怀疑是因为对话框不可见的问题(可能是文件已损坏、已设置只读建议、文件受密码保护等等)。

      我知道有些工具不使用 Office,但它们非常昂贵。我的解决方案是切换到自动化 OpenOffice。 OpenOffice 似乎要稳定得多,而且我已将挂起的进程等抛在脑后。

      所以,虽然我想我是在说“不要自动化 Microsoft Office”,但我并不是建议您完全放弃自动化;只是我在自动化 OpenOffice 方面比 Microsoft Office 取得了更多的成功。

      【讨论】:

      • OpenOffice 可能被设计为在服务器环境中实现自动化。 确定 Microsoft Office 不是。
      【解决方案3】:

      SpreadsheetGear for .NET 可以读取 xls 或 xlsx 工作簿,并且可以打印到默认打印机而不显示任何对话框(请参阅 WorkbookView.Print() 方法)。

      您可以下载评估here

      免责声明:我拥有 SpreadsheetGear LLC

      【讨论】:

        【解决方案4】:

        像许多人一样,我看到过这种行为。它是由在服务器中使用 Office API 引起的,尤其是多线程 ASP.NET 应用程序。

        但是,您已经说过您不想知道不射中自己的脚,所以没什么可说的。你似乎被之前愚蠢的后果所困。


        好的,如果你听说过这个,请阻止我:

        一位男士在 StackOverflow 上提问。他说,“所以,当我从服务内部自动化 Office 应用程序时,就会发生不好的事情”。因此,John Saunders 说,“所以,不要从服务内部自动化 Office 应用程序。从桌面应用程序内部自动化它,就像 Microsoft 打算做的那样。”

        当收到需要 Excel 的请求时,您应该创建一个运行 Windows 窗体应用程序的进程。应用程序可能必须在没有窗口的情况下启动,或者您可能需要在 Remote Desktop 连接的上下文中启动它。在任何情况下,要执行的任务都可以作为命令行参数传递,或者程序可以托管 WCF 服务以将命令发送给它。

        这个程序可以像期望调用 Excel 一样调用 Excel。它甚至可以处理多个 Excel 命令(一次一个)。但是,如果它挂起,则可以终止该进程并启动另一个进程。

        我从未尝试过这个,但听起来它比试图让 Office 自动化做一些它不打算做的事情更好。

        【讨论】:

        • 我知道我们已经中弹了,我只是在问如何最好地恢复 :) 我的意思是我不能使用像“只是不要使用 Office 自动化”这样的答案" - 即我要求的是建设性的答案。
        • 你听过 Henny Youngman 的老笑话:一个男人去看医生,他说,“医生,我这样做的时候很痛”,医生说,“那么不要这样做!”。你说你是在打自己的脚,你问如何避免火药烧伤和弹孔,但你不会放下枪。
        猜你喜欢
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        相关资源
        最近更新 更多