Hi Vieri

The form you've created contains a set of controls of which one or more of 
them are of the "Text box" variety. 


You may also have other controls on the form such as a "Check Box", "Label" or 
"Push Button" these latter controls don't have the ability to hold text or 
edit text so don't have the .Text property. So for these controls the code 
x.Text will fail.


Try this

Sub EnumerateFields

        oDoc = ThisComponent
        oDrawPage = oDoc.DrawPage
        oForm = oDrawPage.Forms.GetByIndex(0)
        For i = 0 To oForm.getCount()-1
           x = oForm.getByIndex(i)
           if x.supportsService("com.sun.star.form.component.TextField") then
                        Print x.getName() & " : " & x.Text
                End If
        Next
  
End Sub


Iain




On Wednesday 08 May 2013 04:16:52 Vieri wrote:
> Thanks!
> 
> Making progress... finally.
> 
> Your code actually retrieved the text within my first "text box" (which is
> at least something!) but then it fails with the error:
> 
> LibreOffice 4.0.2.2
> BASIC runtime error.
> '423'
> Text
> 
> it points to line:
>  Print x.getName() & " : " & x.Text
> 
> It may be choking on a "formatted field" within the document.
> 
> Just out of curiosity, how did you know that you had to use
> ThisComponent.DrawPage.Forms? As a novice, I find the documentation to be
> quite confusing and a supposedly "simple" task such as getting text field
> values seems to be quite difficult. I mean, I found examples on the net and
> they all start with something like:
> 
>   vEnum = ThisComponent.getTextFields().createEnumeration()
>   If Not IsNull(vEnum) Then
>     Do While vEnum.hasMoreElements()
>       vVal = vEnum.nextElement()
> 
> but then I either don't know how to continue or the examples I found on the
> net don't work (maybe outdated OO or LO versions).
> 
> BTW, is there an IDE that can auto-complete Basic code (eg. vVal.??? as in
> the example above).
> 
> Thanks,
> 
> Vieri
> 
> --- On Wed, 5/8/13, mcmurchy1917-libreoff...@yahoo.co.uk <mcmurchy1917-
libreoff...@yahoo.co.uk> wrote:
> > I've created two "Text Boxes" in a
> > form in a writer document.
> > 
> > I can iterate over them like this grabbing the text as I go
> > 
> > 
> > Sub EnumerateFields
> > 
> >     oDoc = ThisComponent
> >     oDrawPage = oDoc.DrawPage
> >     oForm = oDrawPage.Forms.GetByIndex(0)
> >       For i = 0 To oForm.getCount()-1
> >          x =
> > oForm.getByIndex(i)
> >          Print
> > x.getName() & " : " & x.Text
> >       Next
> >  
> > End Sub
> > 
> > 
> > Does this help in anyway?
> > 
> > Iain
> > 
> > On Wednesday 08 May 2013 01:50:02 Vieri wrote:
> > > --- On Tue, 5/7/13, Vieri <rentor...@yahoo.com>
> > 
> > wrote:
> > > > --- On Mon, 5/6/13, Andrew Douglas
> > > > Pitonyak <and...@pitonyak.org>
> > > > 
> > > > wrote:
> > > > > 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....
> > > > 
> > > > Hi,
> > > > 
> > > > Thanks for the reply but I'm still having
> > 
> > trouble.
> > 
> > > > I'm either way off-course, misusing LO or making a
> > 
> > dumb
> > 
> > > > rookie mistake.
> > > > 
> > > > I copied your macros to my odt document.
> > > > I then did a "tools, macros, run macro..." and
> > 
> > selected the
> > 
> > > > Subs I copied.
> > > > If I run EnumerateTextFields then it yields the
> > 
> > "Finished"
> > 
> > > > message box (nothing else).
> > > > If I run DisplayMasterFields then it yields the
> > 
> > following
> > 
> > > > message:
> > > > 
> > > > ===Text Field Masters===
> > 
> > (com.sun.star.text.fieldmaster.SetExpression.Illustration,Illustration)
> > 
> > (com.sun.star.text.fieldmaster.SetExpression.Table,Table)
> > 
> > (com.sun.star.text.fieldmaster.SetExpression.Text,Text)
> > 
> > (com.sun.star.text.fieldmaster.SetExpression.Drawing,Drawing)
> > 
> > > > My odt document has 2 input fields in a form.
> > > > 
> > > > By the way, if I place a button within my form and
> > 
> > configure
> > 
> > > > the "Mouse button pressed" to launch, say,
> > > > EnumerateTextFields then I get the following error
> > 
> > message:
> > > > "LibreOffice 4.0.2.2 BASIC runtime error. '423'
> > > > getTextFields" and it points at the line:
> > > > "oEnum =
> > 
> > oDoc.getTextFields().createEnumeration()"
> > 
> > > > I'm stuck on something that should be quite
> > 
> > simple.
> > 
> > > > I'm attaching my odt file hoping that someone can
> > 
> > tell me
> > 
> > > > what novice mistake I'm making.
> > > 
> > > Trying to attach the file again but it seems that the
> > 
> > mailing list strips it
> > 
> > > out.
> > > 
> > > Thanks,
> > > 
> > > Vieri

-- 
To unsubscribe e-mail to: users+unsubscr...@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

Reply via email to