Сохранить документ Word с JACOB (Java)

Я пытаюсь создать простую программу на Java, чтобы открыть существующий текстовый документ, что-то изменить и сохранить как .html-файл.

Часть, которая не работает, - это сохранить ее как .html . Проблема в том, что я получил html-файл, но это всего лишь переименованный doc-файл. Так что это не совсем .html-файл, с которым я могу работать.

Вот что я нашел с помощью Google:

Object oWordBasic = Dispatch.call(oWord, "WordBasic").getDispatch(); 
Dispatch.call((Dispatch) oWordBasic, "FileSaveAs", path); 

Что мне нужно сделать, чтобы на выходе получить html-файл?

Заранее спасибо.


person Tronje182    schedule 05.08.2010    source источник
comment
Никогда не говорите, что это не работает, когда просите о помощи. Подробно опишите, какие шаги вы предприняли, какие результаты вы ожидали от них и какие результаты вы получили. Прямо сейчас невозможно узнать, является ли ваша проблема пустым HTML-файлом и необработанным исключением времени выполнения, файлом в неправильной кодировке, файлом, в котором объекты HTML не экранированы, и т. д., и все это требует разных разрешений.   -  person Andrzej Doyle    schedule 05.08.2010
comment
Спасибо, теперь я добавил некоторые детали.   -  person Tronje182    schedule 05.08.2010


Ответы (2)


Он использует объект автоматизации OLE для сохранения файла, поэтому вам нужно найти метод или параметр для указания типа файла.

Это макрос, который я мог бы записать с помощью Word:

ActiveDocument.SaveAs filename:="asdd.htm", FileFormat:=wdFormatHTML, _
    LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
    :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
    SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
    False

Это означает, что вы должны указать параметр FileFormat := wdFormatHTML (или постоянное значение) для метода SaveAs. Это оставлено в качестве упражнения для читателя :)

person helios    schedule 05.08.2010
comment
PS: вы всегда можете попробовать записать макрос в Word, посмотреть на сгенерированный код и узнать, как вы что-то делаете через VBA. Затем вы можете перевести этот код VBA в свой реальный код (VBScript или Dispatch.call в вашем случае). - person helios; 05.08.2010
comment
Спасибо, я нашел ответ. Я пробовал это с макро-функцией слова, прежде чем задавать вопрос, но это не помогло мне;) - person Tronje182; 05.08.2010
comment
В большинстве случаев значения, которые изменяет пользователь, становятся параметрами метода. Поэтому в этом случае вам нужно выбрать тип файла, чтобы написать правильный HTML. И это стало параметром метода :) Мне показалось очень интересным и мощным интегрировать VBA в какое-то другое приложение, наслаждайтесь. - person helios; 11.08.2010

Я разобрался, спасибо helios за подсказку.

Правильный код:

Object oWordBasic = Dispatch.call(oWord, "WordBasic").getDispatch(); 
Dispatch.call((Dispatch) oWordBasic, "FileSaveAs", path, new Variant(8)); 

Параметр варианта — выходной формат. (например, 8 — html, 6 — rtf, 17 — pdf). Полный список можно найти по адресу: Перечисление WdSaveFormat

person Tronje182    schedule 05.08.2010
comment
Отлично, так как ответ helios был наиболее полезным для решения вашей проблемы, вы можете щелкнуть пустую галочку рядом с ним, чтобы принять его. - person Todd Main; 05.08.2010
comment
Вы можете объявить ту же константу в своей Java-программе, чтобы сохранить ясность значения 8. И должен быть способ сделать вызов именованных параметров, я имею в виду, чтобы сделать method param1=value1,param5=value5 вещь :). Спасибо за чек! - person helios; 06.08.2010