2010-09-07 2 views
6

Ich verwende JACOB, um COM-Aufrufe an PowerPoint und andere Office-Anwendungen von Java auszuführen. Auf einem bestimmten Feld Windows 7 Ich erhalte die folgende Meldung ziemlich oft, aber nicht immer:Office 2007 kann Dateien nicht öffnen, wenn es von einem Dienst über JACOB aufgerufen wird

Source: Microsoft Office PowerPoint 2007 
Description: PowerPoint could not open the file. 

aus Excel ich:

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. 

Das Wort Fehler ist nur:

VariantChangeType failed 

Das folgende ist was ich gerade laufe, der Fehler kommt von der letzten Zeile.

 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(); 

Ich habe versucht, einen Haltepunkt setzt kurz vor dem Open-Aufruf zu tun, und die Datei ist, und ich kann es wirklich mit Powerpoint in der GUI öffnen, aber wenn ich die Ausnahme ausgelöst Schritt.

Die ärgerliche Sache an diesem Problem ist, dass es scheint, kontinuierlich zu beginnen, aber nach dem Stoßen auf es für eine Weile (rununning den gleichen Code), wird schließlich erfolgreich abgeschlossen, und danach nie wieder auftritt.

Weitere Untersuchungen, die ich gefunden habe, geschieht dies nur mit .ppt, .doc und .xls Dateien, nicht .pptx, .docx und .xlsx. Und soweit ich das beurteilen kann, ist es nicht Dateisystem-bezogen (ich habe den Mechanismus ausgetauscht, der die Dateien kopiert und versucht hat, die Dateien auf ein anderes Dateisystem zu setzen).

Ich habe gerade festgestellt, dass dies nur passiert, wenn die Java-Anwendung als Dienst ausgeführt wird, nicht wenn ich catalina.bat start von der Befehlszeile aus ausführen.

Antwort

2

Funktioniert das für Sie?

import com.jacob.activeX.ActiveXComponent; 
import com.jacob.com.ComThread; 
import com.jacob.com.Dispatch; 
import com.jacob.com.Variant; 

public class PPT { 
    private static final String inputFile = "c:\\learning.ppt"; 
    public static void main(String[] args) { 
     ActiveXComponent slideApp = new ActiveXComponent("PowerPoint.Application"); 
     slideApp.setProperty("Visible", new Variant(true)); 
     ActiveXComponent presentations = slideApp.getPropertyAsComponent("Presentations"); 
     ActiveXComponent presentation = presentations.invokeGetComponent("Open",new Variant(inputFile), new Variant(true)); 
     ComThread.Release(); 
      } 
     } 

Update: Wenn dies der Client arbeitet, und es ist nur Automatisierung, die die Probleme verursacht, können Sie http://support.microsoft.com/kb/257757 sehen auf mögliche Probleme zu suchen. Dort sind die Fehlercodes offensichtlich unterschiedlich, aber es kann Ihnen helfen, die Fehler zu beheben.

+0

ich den gleichen Fehler, dass die Verwendung. Auch das läuft als Dienst, also war es kopflos absichtlich. –

+0

Ist Ihre Win 7-Box x64 oder x86? Wenn es x64 ist, haben Sie die 64-Bit-JVM bereitgestellt? –

+0

Ja, es ist x64, mit einer 64-Bit-JVM und der x64-Version von jacob.dll. –

2

hatte ich das gleiche Problem (jacob in Dienst nicht funktioniert), und dies hilfreich Posting (Wechsel der dcomcnfg) hat den Trick:

http://bytes.com/topic/c-sharp/answers/819740-c-service-excel-application-workbooks-open-fails-when-called-service#post3466746

+2

Hier ist eine noch einfachere Lösung. Als Administrator, machen Sie die folgenden zwei Ordner: "C: \ Windows \ SysWOW64 \ Konfiguration \ Systemprofil \ Desktop" und "C: \ Windows \ System32 \ Konfiguration \ Systemprofil \ Desktop". Sie benötigen wahrscheinlich nur das eine oder das andere, aber dies deckt beide Fälle auf einem 64-Bit-Betriebssystem ab. Von hier: [link] (http://bytes.com/topic/c-sharp/answers/819740-c-service-excel-application-workbooks-open-fails-when-called-service#post3514712) –

Verwandte Themen