[oodisc] Возможно ли поле ввода текстового документа заполнить с помощью макроса
Владислав Орлов
software на pro-za.com.ua
Пт Дек 16 11:59:43 MSK 2005
В сообщении от Четверг, 15-Дек-2005 07:35 Sergey Ivanov написал(a):
> Имеем текстовый документ, в котором находятся несколько десятков полей
> ввода (вставка-поля-дополнительно-поле ввода) с именами "дата",
> "подписавший" и т.п. Возможно ли их заполнить с помощью макроса?
> Ru.OpenOffice.org 2.0 , WinXPhome
>
> С уважением, С.Иванов
Andrew Pitonyak в своей "Useful Macro Information For OpenOffice" (доступна
здесь http://www.pitonyak.org/AndrewMacro.sxw) предлагает такой вариант от
Heike Talhammer:
Text Fields
The following macro, provide by Heike Talhammer, demonstrates how to enumerate
the text fields contained in a document. The macro sets the field values and
then uses refresh to cause the fields to update. In case you missed it, I
will say it again: This macro changes the value of all of the fields
contained in your document.
Listing 5.37: Enumerate text fields.
REM Author: Heike Talhammer <info на bios-pro.de>
REM Modified: Andrew Pitonyak
Sub EnumerateFields
Dim vEnum
Dim vVal
Dim s1$, s2$
Dim sFieldName$, sFieldValue$, sInstanceName$, sHint$, sContent$
vEnum = thisComponent.getTextFields().createEnumeration()
If Not IsNull(vEnum) Then
Do While vEnum.hasMoreElements()
vVal = vEnum.nextElement()
If vVal.supportsService("com.sun.star.text.TextField.Input") Then
sHint=vVal.getPropertyValue("Hint")
sContent=vVal.getPropertyValue("Content")
s1=s1 &"Hint:" & sHint & " - Content: " & sContent & chr(13)
'change the content
vVal.setPropertyValue("Content", "My new content")
ThisComponent.TextFields.refresh()
End If
If vVal.supportsService("com.sun.star.text.TextField.User") Then
sFieldName =vVal.textFieldMaster.Name
sFieldValue = vVal.TextFieldMaster.Value
sInstanceName= vVal.TextFieldMaster.InstanceName
s2 = s2 & sFieldName & " = " & sFieldValue & chr(13) & "InstanceName:
" & _
sInstanceName & chr(13)
'new value for textfield
vVal.TextFieldMaster.Value=25
End If
Loop
MsgBox s1, 0, "=== Input Fields ==="
MsgBox s2, 0, "=== User Fields ==="
End If
ThisComponent.TextFields.refresh()
End Sub
Этот листинг можно курочить под свои нужды. HINT: при отладке кода ОЧЕНЬ
удобно пользоваться xRay (макрос, который подробно расписывает свойства,
методы и т.п. указанного объекта). xRay лежит на
http://www.ooomacros.org/dev.php
--
Всего доброго!
Владислав Орлов aka JohnSUN
Подробная информация о списке рассылки Oo-discuss