1

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

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

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

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

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

有没有人有过这种行为的经验?

4

4 回答 4

1

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

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

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

各方面都好很多!

于 2009-06-10T18:39:18.300 回答
1

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

I know there are tools available that don't use Office, but they are very expensive. My solution was to switch to automating OpenOffice. OpenOffice seems to be much more stable, and I've left hanging processes and the like behind.

So, while I suppose I am saying "don't automate Microsoft Office", I'm not suggesting that you abandon automation altogether; just that I've had much more success automating OpenOffice than Microsoft Office.

于 2009-09-08T08:50:38.773 回答
0

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

您可以在此处下载评估。

免责声明:我拥有 SpreadsheetGear LLC

于 2009-06-03T05:09:21.897 回答
-2

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

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


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

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

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

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

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

于 2009-08-04T22:11:56.383 回答