[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