On 05/06/2013 05:21 AM, Vieri wrote:
Hi,
I have an odt writer document with 2 input text fields (added with the form designer toolbar). I
manually type text into one of the fields. I copy/pasted a macro to see if I could grab the text
within the input field but haven't had any luck. This is the test macro in Basic:
Sub EnumerateFields
vEnum = ThisComponent.getTextFields().createEnumeration()
If Not IsNull(vEnum) Then
If vEnum.hasMoreElements() Then
Print "OK"
Else
Print "NOT OK"
End If
End If
End Sub
If I manually run this macro I get the "NOT OK" message.
What am I doing wrong?
What is the correct way of getting the text field elements?
Thanks
Vieri
I grabbed these two routines from my test modules without running them
first.... so I have no idea what state they are in, but without taking
the time to create a test document and such..... Perhaps these will help
you. I don't even know why I have them. Probably have better coverage in
OOME_3.odt or AndrewMacro.odt (but I did not check).
REM Author: Andrew Pitonyak
Sub EnumerateTextFields(Optional oUseDoc)
Dim oDoc 'Document to use.
Dim oEnum 'Enumeration of the text fields.
Dim oField 'Enumerated text field.
Dim s$ 'Generic string variable.
Dim n% 'Count the number of text fields.
Dim nUnknown% 'Count the unexpected field types.
Dim bDisplayExpressions As Boolean
bDisplayExpressions = True
If IsMissing(oUseDoc) Then
oDoc = ThisComponent
Else
oDoc = oUseDoc
End If
oEnum = oDoc.getTextFields().createEnumeration()
If IsNull(oEnum) Then
Print "getTextFields().createEnumeration() returns NULL"
Exit Sub
End If
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
If oField.supportsService("com.sun.star.text.TextField.Input") Then
REM If you update Content, use oDoc.TextFields.refresh() afterwards.
n = n + 1
s = s & "Input (" & oField.getPropertyValue("Hint") & ", " & _
oField.getPropertyValue("Content") & ")" & CHR$(10)
ElseIf oField.supportsService("com.sun.star.text.TextField.User") Then
REM You can update the text master field, but be certain to use
REM oDoc.TextFields.refresh() afterwards.
n = n + 1
s = s & "User (" & oField.TextFieldMaster.Name & ", " & _
oField.TextFieldMaster.Value & ", " & _
oField.TextFieldMaster.InstanceName & ")" & CHR$(10)
ElseIf
oField.supportsService("com.sun.star.text.TextField.PageNumber") Then
REM Ignore page number fields
ElseIf
oField.supportsService("com.sun.star.text.TextField.GetReference") Then
REM Ignore references to Listings, Tables, and Figures because I
want to.
If oField.SourceName <> "Listing" AND oField.SourceName <>
"Table" AND oField.SourceName <> "Figure" Then
n = n + 1
s = s & "Reference (" & oField.SourceName & ", " &
oField.getPresentation(False) & ")" & CHR$(10)
End If
ElseIf
oField.supportsService("com.sun.star.text.TextField.SetExpression") Then
REM This includes things such as Tables, Listing, and Figures
REM The values will be similar to "SetExpression (Table, Table + 1)"
If bDisplayExpressions Then
n = n + 1
s = s & "SetExpression (" & oField.VariableName & ", " &
oField.Content & ")" & CHR$(10)
Inspect oField
End If
ElseIf
oField.supportsService("com.sun.star.text.TextField.Chapter") OR _
oField.supportsService("com.sun.star.text.TextField.DocInfo.Title") OR _
oField.supportsService("com.sun.star.text.TextField.DocInfo.ChangeDateTime")
OR _
oField.supportsService("com.sun.star.text.TextField.Bibliography") OR _
oField.supportsService("com.sun.star.text.TextField.Annotation") Then
n = n + 1
s = s & oField.getPresentation(True) & " : " &
oField.getPresentation(False) & CHR$(10)
Else
nUnknown = nUnknown + 1
n = n + 1
If nUnknown = 1 Then inspect(oField)
s = s & "Unknown : " & oField.getPresentation(True) & " : " &
oField.getPresentation(False) & CHR$(10)
End If
If n > 50 Then
MsgBox s, 0, "Text Fields"
s = ""
n = 0
End If
Loop
If n > 0 Then
MsgBox s, 0, "Text Fields"
s = ""
n = 0
End If
If nUnknown > 0 Then Print "Found " & nUnknown & " unexpected field
types"
Print "Finished"
End Sub
Sub DisplayMasterFields(Optional oUseDoc)
Dim oMasters 'Text field masters from the document.
Dim sNames() 'Text field master names.
Dim i% 'Generic loop variable.
Dim sVal$
Dim s$ 'Generic string variable.
Dim oMasterField 'A particular master field.
Dim sUserType$ 'Holds the name for a User defined text field master
sUserType = "com.sun.star.text.FieldMaster.User"
If IsMissing(oUseDoc) Then
oMasters = ThisComponent.getTextFieldMasters()
Else
oMasters = oUseDoc.getTextFieldMasters()
End If
sNames() = oMasters.getElementNames()
s = "===Text Field Masters==="
For i = LBound(sNames()) to UBound(sNames())
s = s & Chr$(13) & "(" & sNames(i)
oMasterField = oMasters.getByName(sNames(i))
If Not IsNull(oMasterField) Then
s = s & "," & oMasterField.Name
If (Left$(sNames(i),Len(sUserType)) = sUserType) Then
REM If the user type is an expression, then you can access
REM the Value property, which is a double.
s = s & "," & oMasterField.Content
REM In general, you will not get here You will
REM have entries with names such as:
REM com.sun.star.text.FieldMaster.SetExpression.Illustration
REM com.sun.star.text.FieldMaster.SetExpression.Table
REM com.sun.star.text.FieldMaster.SetExpression.Text
REM com.sun.star.text.FieldMaster.SetExpression.Drawing
REM com.sun.star.text.FieldMaster.User
End If
End If
s = s & ")"
Next i
MsgBox s, 0, "Text Field Masters"
End Sub
--
Andrew Pitonyak
My Macro Document: http://www.pitonyak.org/AndrewMacro.odt
Info: http://www.pitonyak.org/oo.php
--
To unsubscribe e-mail to: users+unsubscribe@global.libreoffice.org
Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/global/users/
All messages sent to this list will be publicly archived and cannot be deleted
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.