6

我正在尝试编写我的 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 规范来从 VB 或 python 访问 OO UNO 对象。

4

2 回答 2

2

再会。

如果你选择使用 VB,你必须知道这一点:

VBA:OpenOffice.org Basic 和 VBA 之间的兼容性与 OpenOffice.org Basic 语言以及运行时库有关。OpenOffice.org API 和对话框编辑器与 VBA 不兼容(标准化这些接口会使 OpenOffice.org 中提供的许多概念变得不可能)。

如果是python

OpenOffice.org 3.1 附带 Python 脚本语言版本 2.6.1。较早的 OpenOffice.org 附带 Python 版本 2.3.4。这个 Python 发行版带有 Uno 模块,它将 UNO API 连接到 python 脚本语言。要在 Linux 上运行此版本的 Python,您可以直接转到 OpenOffice.org PATH。正如人们对 Python 的任何发行版所期望的那样,OOo-Python 也可以从命令行运行。如果您已经安装了单独的 Python 2.6,则可以使用这些说明将 uno 模块(Python-UNO 桥)导入其中。如果您已经在 Windows 上安装了不同版本的 Python,您还可以使用 COM 桥而不是 Python 桥来访问 UNO API。需要附加的 pywin32 模块,以便 Python 可以与 COM 对话。

Python UNO 桥

upd:oooblogger可能会帮助您了解 python 和 uno 集成。

于 2012-06-01T08:06:36.903 回答
1

我没有使用 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")

您可以在http://oqei.free.fr/echange/VBA/Programmation_OpenOffice_org_3_ed1_v1.pdf找到这个大 pdf 的其余部分,它是法文的,但代码是通用的,嗯?希望能帮助到你..

于 2012-06-01T07:54:39.660 回答