2010-09-07 10 views
6

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ń.

Odpowiedz

2

Czy to działa dla Ciebie?

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

Aktualizacja: Jeśli pracuje klienta i to właśnie automatyzacja, który jest przyczyną problemów, można zobaczyć http://support.microsoft.com/kb/257757 patrzeć na ewentualne problemy. Tam kody błędów są oczywiście różne, ale może pomóc w ich rozwiązywaniu.

+0

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. –

+0

Czy Twoje Win 7 x 64 lub x86? Jeśli jest to x64, czy wdrożono 64-bitową maszynę JVM? –

+0

Tak, jest to x64, z 64-bitową wersją JVM i wersją x64 jacob.dll. –

2

miałem ten sam problem (Jacob w służbie nie działa), a to jako komentarz (zmiana dcomcnfg) wystarczyły:

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

+2

Oto jeszcze łatwiejsza poprawka. Jako administrator utwórz następujące dwa foldery: "C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop" i "C: \ Windows \ System32 \ config \ systemprofile \ Desktop". Prawdopodobnie potrzebujesz tylko jednego lub drugiego, ale dotyczy to obu przypadków w 64-bitowym systemie operacyjnym. Stąd: [link] (http://bytes.com/topic/c-sharp/answers/819740-c-service-excel-application-workbooks-open-fails-when-called-service#post3514712) –

Powiązane problemy