Estoy usando JACOB para hacer llamadas COM a PowerPoint y otras aplicaciones de Office desde Java. En particular, una caja de Windows 7 que estoy recibiendo el siguiente mensaje muy a menudo, pero no siempre:Office 2007 no puede abrir archivos cuando se llama a través de JACOB desde un servicio
Source: Microsoft Office PowerPoint 2007
Description: PowerPoint could not open the file.
desde Excel me sale:
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.
El error Palabra es simplemente:
VariantChangeType failed
Lo siguiente es lo que estoy ejecutando, el error proviene de la última línea.
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();
he intentado poner un punto de interrupción justo antes de hacer la llamada a Open y el archivo está allí, y que en realidad puede abrirlo con PowerPoint en la GUI, pero cuando me paso se produce la excepción.
Lo molesto de este problema es que parece suceder de forma continua, pero después de hurgar en él durante un tiempo (volver a ejecutar el mismo código), finalmente se completa con éxito y después de eso nunca vuelve a producirse.
Investigación adicional He encontrado que esto solo ocurre con archivos .ppt, .doc y .xls, no con .pptx, .docx y .xlsx. Y hasta donde sé, no está relacionado con el sistema de archivos (he cambiado el mecanismo que copia los archivos e intenté poner los archivos en un sistema de archivos diferente).
Acabo de notar que esto solo ocurre cuando la aplicación Java se ejecuta como un servicio, no cuando ejecuto catalina.bat start
desde la línea de comandos.
me sale el mismo error que el uso. También esto funciona como un servicio así que tenerlo sin cabeza fue deliberado. –
¿Es su Win 7 box x64 o x86? Si es x64, ¿ha implementado la JVM de 64 bits? –
Sí, es x64, con una JVM de 64 bits y la versión x64 de jacob.dll. –