代码之家  ›  专栏  ›  技术社区  ›  mookid8000

从ASP.NET WebService首次打印时Excel挂起

  •  1
  • mookid8000  · 技术社区  · 17 年前

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

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

    但是,如果我们以应用程序池标识的身份登录到服务器,打开Excel,向打印机发送一些信息,然后再次关闭它,打印将从此开始工作!

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

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

    有人有过这种行为的经历吗?

    4 回复  |  直到 17 年前
        1
  •  1
  •   mookid8000    17 年前

    嗯,似乎没有人有这个问题。

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

    所以我通过做很久以前应该做的事情来解决这个问题:我用 Topshelf ,它响应一些msmq消息并进行打印,然后我的Web服务可以通过消息队列订购打印输出。

    各方面都好得多!

        2
  •  1
  •   Cocowalla    17 年前

    我从来没有遇到过使用Microsoft Excel、Word和PowerPoint通过Web服务中的Interop将Office文档打印为PDF格式的问题(性能差、挂起进程、崩溃进程等)。我也遇到了一些问题,我怀疑是因为不可见的对话框(可能文件已损坏,建议设置只读,文件受密码保护,或其他原因)。

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

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

        3
  •  0
  •   Joe Erickson    17 年前

    SpreadsheetGear for .NET 可以读取XLS或XLSX工作簿,并且可以在不显示任何对话框的情况下打印到默认打印机(请参见workbookview.print()方法)。

    您可以下载评估 here .

    免责声明:我拥有SpreadsheetGear LLC

        4
  •  -2
  •   John Saunders    17 年前

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

    不过,你说过你不想知道不要开枪打自己的脚,所以没什么好说的。你似乎被早期愚蠢的后果所困住了。


    好吧,如果你听说了就阻止我 一:

    一个人问了一个关于stackoverflow的问题。他说,“所以,当我从服务内部自动化一个办公应用程序时,就会发生糟糕的事情”。所以,JohnSaunders说,“所以,不要从服务内部自动化Office应用程序。从桌面应用程序内部实现自动化,就像微软打算做的那样。”

    当需要Excel的请求出现时,您应该创建一个运行Windows窗体应用程序的进程。应用程序可能必须在没有窗口的情况下启动,或者您可能需要在 Remote Desktop 连接。在任何情况下,要执行的任务都可以作为命令行参数传递,或者程序可以宿主一个WCF服务来向其发送命令。

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

    我从来没有尝试过,但听起来这比让办公自动化去做一些它没有设计好的事情要好。

    推荐文章