2009-08-27 5 views
3

Я пытаюсь построить reStructuredText для инструментальной цепочки документов Word Word, поэтому я смогу сохранить только rst источников в контроль версий.Программно конвертировать * .odt файл в файл MS Word * .doc с использованием базового макроса OpenOffice.org

До сих пор я -

Есть 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)" 

я получаю: «BASIC ошибка выполнения Свойство или метод не найден.». сообщение на линии:

document = ThisComponent.CurrentController.Frame 

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

Или я нахожусь на нем совершенно назад?

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

ответ

0

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