Używam programu JACOB do wykonywania wywołań COM do programu PowerPoint i innych aplikacji pakietu Office z poziomu Java. W szczególności Windows 7 polu Dostaję następujący komunikat dość często, ale nie zawsze:Pakiet Office 2007 nie może otwierać plików po wywołaniu przez JACOB z usługi
Source: Microsoft Office PowerPoint 2007
Description: PowerPoint could not open the file.
z Excela uzyskać:
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.
Błąd Słowo jest tylko:
VariantChangeType failed
Oto, co używam, błąd pochodzi z ostatniego wiersza.
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();
Próbowałem oddanie przerwania tuż przed wykonaniem otwartego zaproszenia i plik istnieje, i rzeczywiście mogę otworzyć go z PowerPoint w GUI, ale kiedy krok jest wyjątek.
To irytujące w tej kwestii, że wydaje się, że dzieje się to ciągle na początku, ale po grzebieniu go przez chwilę (ponownym uruchomieniu tego samego kodu), w końcu kończy się pomyślnie, a potem nigdy się nie powtórzy.
Dalsze badania Odkryłem, że dzieje się tak tylko z plikami .ppt, .doc i .xls, a nie .pptx, .docx i .xlsx. O ile wiem, nie dotyczy to systemu plików (wymieniłem mechanizm, który kopiuje pliki i próbował umieścić pliki w innym systemie plików).
Właśnie zauważyłem, że dzieje się tak tylko wtedy, gdy aplikacja Java działa jako usługa, a nie gdy uruchamiam catalina.bat start
z wiersza poleceń.
uzyskać ten sam błąd przy użyciu tego. Również to działa jako usługa, więc bez głowy było celowe. –
Czy Twoje Win 7 x 64 lub x86? Jeśli jest to x64, czy wdrożono 64-bitową maszynę JVM? –
Tak, jest to x64, z 64-bitową wersją JVM i wersją x64 jacob.dll. –