我正在使用 JACOB 从 Java 对 PowerPoint 和其他 Office 应用程序进行 COM 调用。在特定的 Windows 7 机器上,我经常收到以下消息,但并非总是如此:
Source: Microsoft Office PowerPoint 2007
Description: PowerPoint could not open the file.
从excel我得到:
ERROR - Invoke of: Open
Source: Microsoft Office Excel
Description: Microsoft Office Excel cannot access the file 'c:\marchena\marchena10\work\marchena\batch_58288\input\content_1.xlsx'. There are several possible reasons:
? The file name or path does not exist.
? The file is being used by another program.
? The workbook you are trying to save has the same name as a currently open workbook.
Word 错误只是:
VariantChangeType failed
以下是我正在运行的,错误来自最后一行。
ComThread.InitSTA();
slideApp = new ActiveXComponent("PowerPoint.Application");
Dispatch presentations = slideApp.getProperty("Presentations").toDispatch();
Dispatch presentation = Dispatch.call(presentations, "Open", inputFile.getAbsolutePath(),
MsoTriState.msoTrue.getInteger(), // ReadOnly
MsoTriState.msoFalse.getInteger(), // Untitled The Untitled parameter is used to create a copy of the presentation.
MsoTriState.msoFalse.getInteger() // WithWindow
).toDispatch();
我已经尝试在执行 Open 调用之前放置一个断点并且文件在那里,我实际上可以在 GUI 中使用 PowerPoint 打开它,但是当我单步执行时抛出异常。
这个问题的烦人之处在于,一开始它似乎一直在发生,但在戳了一会儿(重新运行相同的代码)之后,它最终成功完成,之后就再也没有发生过。
进一步研究我发现这只发生在 .ppt、.doc 和 .xls 文件中,而不是 .pptx、.docx 和 .xlsx。据我所知,它与文件系统无关(我已经换掉了复制文件的机制并尝试将文件放在不同的文件系统上)。
我刚刚注意到,这只发生在 Java 应用程序作为服务运行时,而不是当我从命令行运行时catalina.bat start
。