Программно преобразуйте файл * .odt в файл MS Word * .doc, используя базовый макрос OpenOffice.org - PullRequest
3 голосов
/ 27 августа 2009

Я пытаюсь создать reStructuredText для цепочки инструментов документа MS Word, поэтому я смогу сохранить только первые источники в управлении версиями.

Пока что я -

Имеют rst2odt.py для преобразования reStructuredText в формат OpenOffice.org Writer.

Далее я хочу использовать самый последний OpenOffice.org (в настоящее время 3.1), который выполняет довольно приличную работу по генерации документа Word 97/2000 / XP, поэтому я написал макрос:

sub ConvertToWord(file as string)
  rem ----------------------------------------------------------------------
  rem define variables
  dim document   as object
  dim dispatcher as object
  rem ----------------------------------------------------------------------
  rem get access to the document
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  rem ----------------------------------------------------------------------
  dim odf(1) as new com.sun.star.beans.PropertyValue
  odf(0).Name = "URL"
  odf(0).Value = "file://" + file + ".odt"
  odf(1).Name = "FilterName"
  odf(1).Value = "MS Word 97"
  dispatcher.executeDispatch(document, ".uno:Open", "", 0, odf())

  rem ----------------------------------------------------------------------
  dim doc(1) as new com.sun.star.beans.PropertyValue
  doc(0).Name = "URL"
  doc(0).Value = "file://" + file + ".doc"
  doc(1).Name = "FilterName"
  doc(1).Value = "MS Word 97"

  dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, doc())
end sub

Но когда я выполняю это:

soffice "macro:///Standard.Module1.ConvertToWord(/path/to/odt_file_wo_ext)"

Я получаю: «ОСНОВНАЯ ошибка времени выполнения. Свойство или метод не найдены». сообщение На линии:

document   = ThisComponent.CurrentController.Frame

И когда я комментирую эту строку, приведенный выше вызов завершается без ошибок, но ничего не делает. Я думаю, мне нужно как-то установить значение document для вновь созданного экземпляра, но я не знаю, как это сделать.

Или я иду совсем наоборот?

P.S. Я буду рассматривать JODConverter как запасной вариант, потому что я пытаюсь минимизировать свои зависимости.

1 Ответ

0 голосов
/ 08 декабря 2011

Я бы предложил использовать JODConverter (ваш запасной вариант), потому что вы получаете то, что хотите, и когда / если OpenOffice / LibreOffice улучшают свои фильтры DOC, вам не нужно каждый раз устанавливать / обновлять / тестировать макрос. Это тоже хорошо доказано.

...