Создание сценариев форм OpenOffice с использованием VB или python - PullRequest
6 голосов
/ 21 июля 2010

Я пытаюсь написать скрипт в моем документе OpenOffice (в моем случае Writer), чтобы сделать некоторые простые вещи с виджетами.А именно я хотел бы скопировать текст из виджета в виджет.Для этого я хочу получить один компонент, а затем получить текст из него.

Я пытался сделать что-то вроде этого:

document   = ThisComponent.CurrentController.Frame

oDocument      =  ThisComponent
oTextBoxFrom = document.getByName("Text Box 1")    # 1
oTextBoxFrom = oDocument.getByName("Text Box 1")   # 2

Ни версия № 1, ни № 2 не работают.VB-компилятор показывает, что «Текстовое поле 1» недоступно, но у меня есть этот компонент в моей форме.Я думаю, что я пытаюсь получить этот компонент из неправильного места, например.не это кадр.Я просто не могу понять, какова структура документа.

Это кажется довольно простой задачей, однако я не могу найти какую-либо спецификацию OpenOffice для доступа к объектам OO UNO из VB или python.

Ответы [ 2 ]

2 голосов
/ 01 июня 2012

Добрый день.

если вы решите использовать VB, вы должны знать это:

VBA. Совместимость OpenOffice.org Basic и VBA относится к язык OpenOffice.org Basic, а также библиотека времени выполнения. API OpenOffice.org и редактор диалоговых окон несовместимы с VBA (стандартизация этих интерфейсов сделала бы многие концепции предоставляется в OpenOffice.org невозможно).

если это будет питон :

OpenOffice.org 3.1 поставляется с языком сценариев Python, версия 2.6.1. Более старый OpenOffice.org поставляется с версией Python 2.3.4. Этот дистрибутив Python поставляется с модулем Uno, который соединяет UNO API для языка сценариев Python. Чтобы запустить эту версию Python на Linux, вы можете перейти непосредственно к PATH OpenOffice.org. И как один можно ожидать с любым дистрибутивом Python, OOo-Python может быть запущен также из командной строки. Если у вас уже есть отдельный Python 2.6 установки, вы можете импортировать модуль uno (мост Python-UNO), используя эти инструкции. Если у вас уже есть другая версия Python установлена ​​на Windows, вы также можете получить доступ API UNO, использующий мост COM вместо моста Python. Требуется дополнительный модуль pywin32, чтобы Python мог общаться с COM. Заметка что, хотя API-интерфейс UNO является единым, реализация двумя Мосты немного отличаются, поэтому синтаксис, необходимый каждому иногда разные.

Python UNO bridge

upd: ooobloger может помочь вам понять интеграцию с python и uno.

1 голос
/ 01 июня 2012

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

docCalc = ThisComponent
maFeuille = docCalc.Sheets.getByName("leCSV")
....
for f = 0 to lesFamilles.Count -1' chaque famille
nomFam = lesFamilles.ElementNames(f)
uneFamille = lesFamilles.getByName(nomFam)
...
monDocument.TextTables.hasByName("Finances")
...
lesSections = monDocument.TextSections
sectA = lesSections.getByName("Aline")

Вы можете найти остальное в этом большом pdf на http://oqei.free.fr/echange/VBA/Programmation_OpenOffice_org_3_ed1_v1.pdf, это на французском языке, но код универсален, а?Надеюсь, это поможет ..

...