OOBasic e TextFields

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Avatar utente
mtugnoli
Messaggi: 5
Iscritto il: mercoledì 29 ottobre 2014, 10:40

OOBasic e TextFields

Messaggio da mtugnoli »

Vorrei impostare via codice di un TextFields di tipo "User Input"

Ho cercato su web e ho trovato :

Codice: Seleziona tutto

Dim enuTF As Object, aTextField As Object
Dim sHow As String
enuTF = oDoc.TextFields.createEnumeration
Do While enuTF.hasMoreElements
    aTextField = enuTF.nextElement
    If aTextField.supportsService("com.sun.star.text.TextField.Input") Then
        sHow = aTextField.getPropertyValue("Content")
    End If
Loop
ma gia' da " oDoc.TextFields" mi da' un errore ("Object don't support this property or method")

avete qualche idea ?

Grazie
OpenOffice 3.1 su Windows Vista
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: OOBasic e TextFields

Messaggio da patel »

nel codice che hai allegato non hai definito oDoc, probabilmente ti manca la riga
oDoc = ThisComponent
stai parlando di Calc, Writer, Base ?
hai provato ad usare il registratore di macro ?
allega un file di esempio col risultato che vorresti ottenere.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
mtugnoli
Messaggi: 5
Iscritto il: mercoledì 29 ottobre 2014, 10:40

Re: OOBasic e TextFields

Messaggio da mtugnoli »

Ma io non la uso dal Writer, ma da vb6,

e l'oggetto objDocument non contiene la funzione getTextFields

cosi :

Codice: Seleziona tutto

Sub ConnectOpenOffice()
  If IsOpenOfficeConnected Then Exit Sub
  On Error Resume Next
  Set OpenOffice = CreateObject("com.sun.star.ServiceManager")
  On Error GoTo 0
  If isNullEmpty(OpenOffice) Then
    Err.Raise vbObjectError + OOoErrorN, "OpenOffice", OOo_connectKO
  Else
    Set StarDesktop = CreateUnoService("com.sun.star.frame.Desktop")
    Set OOoIntrospection = CreateUnoService("com.sun.star.beans.Introspection")
    Set OOoDisp = CreateUnoService("com.sun.star.frame.DispatchHelper")
  End If
End Sub


ConnectOpenOffice

Set oDoc= StarDesktop.LoadComponentFromURL(convertToURL(strFilName), "_blank", 0, args)
OpenOffice 3.1 su Windows Vista
Avatar utente
mtugnoli
Messaggi: 5
Iscritto il: mercoledì 29 ottobre 2014, 10:40

Re: OOBasic e TextFields

Messaggio da mtugnoli »

Quello che vorrei ottenere, e' avere un campo da valorizzare da vb6
OpenOffice 3.1 su Windows Vista
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: OOBasic e TextFields

Messaggio da patel »

Non caposco cosa c'entra vb6 con oobasic, se non spieghi meglio su cosa stai lavorando non andiamo avanti
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: OOBasic e TextFields

Messaggio da unlucky83 »

Ti serve qualcosa di questo tipo

Codice: Seleziona tutto

oForm = oDOc.drawpage.forms.getbyindex(0)
	for iCntrl = 0 to oForm.count - 1             ' FOR SUGLI ELEMENTI DEL 'FORMULARIO'
		oCntrl = oForm.getbyindex(iCntrl)          ' ACQ. ELEMNTO DI CICLO
		if oCntrl.Name = sName then            ' SE HA IL NOME DEL MIO ELEMENTO
			oCntrl2=oCntrl
			exit for
		end if                                      ' ENDIF ELEMENTO
	next
sName deve essere il nome del tuo textfield, alla fine del ciclo oCntrl2 è l'oggetto textfiled che desideri
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
mtugnoli
Messaggi: 5
Iscritto il: mercoledì 29 ottobre 2014, 10:40

Re: OOBasic e TextFields

Messaggio da mtugnoli »

Grazie unlucky83 il tuo sorgente e' giusto, ma non so perche'
in vb6 il mio doc mi da' 0 a oDOc.drawpage.forms.Count,

Comunque ho risolto :

Codice: Seleziona tutto

Dim vTextFieldEnum As Object
    Dim vTextField As Object
    Dim I As Integer
    Dim sFieldName$, sFieldValue$, sFieldContent$, sInstanceName$

    Set vTextFieldEnum = objDocument.getTextFields.createEnumeration
    Do While vTextFieldEnum.hasMoreElements()
        Set vTextField = vTextFieldEnum.nextElement()
        
        If vTextField.supportsService("com.sun.star.text.TextField.User") Then
            sFieldName = vTextField.TextFieldMaster.Name
            sFieldValue = vTextField.TextFieldMaster.Value
            sFieldContent = vTextField.TextFieldMaster.Content
            sInstanceName = vTextField.TextFieldMaster.InstanceName
            
            If UCase(vTextField.TextFieldMaster.Name) = UCase("MyFieldName") Then
                vTextField.TextFieldMaster.Content = strValue
                Exit Do
            End If
        End If
    Loop
    
    objDocument.TextFields.Refresh
OpenOffice 3.1 su Windows Vista
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: OOBasic e TextFields

Messaggio da unlucky83 »

Bene. Però mi faresti un piacere? Mi spieghi come usi vb6 con openoffice? Sarebbe meglio dei link che spiegano a grandi linee la procedura da seguire. Il vb non l'ho mai usato, ma almeno chi si imbatte in questa discussione potrà farsi un'idea. Grazie
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
mtugnoli
Messaggi: 5
Iscritto il: mercoledì 29 ottobre 2014, 10:40

Re: OOBasic e TextFields

Messaggio da mtugnoli »

Ok, ma trovare della documentazione che funzioni su vb6 non e' facile ...

happy OpenOffice COM Automation !!


Codice: Seleziona tutto

Public OpenOffice, StarDesktop, OOoIntrospection, OOoDisp

Call ConnectOpenOffice()

Set objDocument = StarDesktop.LoadComponentFromURL(urlfile, "_blank", 0, args)

....
...
...


SaveDocument objDocument, sFileToSave





Sub ConnectOpenOffice()
  If IsOpenOfficeConnected Then Exit Sub
  On Error Resume Next
  Set OpenOffice = CreateObject("com.sun.star.ServiceManager")
  On Error GoTo 0
  If isNullEmpty(OpenOffice) Then
    Err.Raise vbObjectError + OOoErrorN, "OpenOffice", OOo_connectKO
  Else
    Set StarDesktop = CreateUnoService("com.sun.star.frame.Desktop")
    Set OOoIntrospection = CreateUnoService("com.sun.star.beans.Introspection")
    Set OOoDisp = CreateUnoService("com.sun.star.frame.DispatchHelper")
  End If
End Sub

Function SaveDocument(ByRef oDoc As Object, ByVal sFileName As String) As Boolean
    'Save to given filename, will overwrite if exists!
    Dim aFileProperties(0) As Object  'New com.sun.star.beans.PropertyValue
    Dim sUrl As String
    
    sUrl = GetFileURL(sFileName)
    
    Set aFileProperties(0) = MakePropertyValue("Overwrite", True)
    
    On Error Resume Next
    oDoc.storeAsURL sUrl, aFileProperties()
    
    If (Err.Number <> 0) Then
        MsgBox "Failed to save [" + sFileName + "], err=" + CStr(Err.Number) + ": " + Err.Description
    End If
    
    SaveDocument = (Err.Number = 0)
End Function


Ultima modifica di charlie il giovedì 30 ottobre 2014, 18:29, modificato 1 volta in totale.
Motivazione: In questo e nei messaggi precedenti: evidenziato codice
OpenOffice 3.1 su Windows Vista
Rispondi