Office 2007 не может открыть файлы при вызове через JACOB из службы - PullRequest
7 голосов
/ 07 сентября 2010

Я использую JACOB для COM-вызовов в PowerPoint и других приложениях Office из Java.В конкретном окне 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 и файлатам, и я действительно могу открыть его с PowerPoint в графическом интерфейсе, но когда я шагаю, выдается исключение.

Раздражает то, что эта проблема изначально возникает непрерывно, но после некоторого нажатия на нее (повторного запуска одного и того же кода) она в итоге завершается успешно, и после этого никогда не повторяется.

Дальнейшие исследования Я обнаружил, что это происходит только с файлами .ppt, .doc и .xls, но не с .pptx, .docx и .xlsx.И, насколько я могу судить, это не связано с файловой системой (я отключил механизм, который копирует файлы, и попытался поместить файлы в другую файловую систему).

Я только что заметил, что это толькопроисходит, когда приложение Java работает как служба, а не когда я запускаю catalina.bat start из командной строки.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

У меня была та же проблема (jacob в сервисе не работает), и эта полезная публикация (изменение dcomcnfg) добилась цели:

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

2 голосов
/ 14 сентября 2010

Это у вас работает?

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

Обновление: Если это работает клиент и проблемы возникают только из-за автоматизации, вы можете просмотреть http://support.microsoft.com/kb/257757, чтобы посмотреть возможные проблемы. Там коды ошибок, очевидно, разные, но это может помочь вам все же устранить неполадки.

...