Libreoffice calc.
Sul documento sul quale sto’ lavorando ho una Chart XY sulla quale vorrei aggiungere delle Labels (o qualcosa di simile) sulle quali possa riportare delle informazioni relative all’ ultimo calcolo che ho eseguito (e.g. l’ MSE dell’ ultima regressione che è stata calcolata con differenti parametri), magari usando un’ opportuna macro.
E’ possibile?
Grazie.
Innanzi tutto grazie per la cortese e rapida risposta.
Si, ho già provato ad aggiungere un TextBox sulla Chart XY in questione ma non rieco a gestirlo.
In rete ho trovato il seguente codice, che io eseguo in una Macro lanciata, per prova, da un PushButton:
Dim oForm As object, oField As Object
oForm = ThisComponent.Drawpage.Forms.getByName(“Form”) ‘Get Form’
oField = oForm.getByName(“TextBox 1”) ‘Get access to field’
oField.Text = “Hello” ‘Move in value’
ma mi dà errore a questa istruzione:
oForm = ThisComponent.Drawpage.Forms.getByName(“Form”)
con motivazione:
BASIC runtime error.
Property or method not found: Drawpage.
evidentemente, credo, il name “Form” non è quello giusto: o forse è proprio il metodo DrawPage che non appartiene a ThisComponent?.
Nel “Navigator” è presente un Drawing object “TextBox 1”.
Che cosa posso fare?
Grazie
Potresti valutare di sovrapporre al grafico delle “caselle di testo” così come nel seguente esempio.
.
Innanzi tutto grazie per la cortese e rapida risposta.
Si, ho già provato ad aggiungere un TextBox sulla Chart XY in questione ma non rieco a gestirlo.
In rete ho trovato il seguente codice, che io eseguo in una Macro lanciata, per prova, da un PushButton:
Dim oForm As object, oField As Object
oForm = ThisComponent.Drawpage.Forms.getByName(“Form”) ‘Get Form’
oField = oForm.getByName(“TextBox 1”) ‘Get access to field’
oField.Text = “Hello” ‘Move in value’
ma mi dà errore a questa istruzione:
oForm = ThisComponent.Drawpage.Forms.getByName(“Form”)
con motivazione:
BASIC runtime error.
Property or method not found: Drawpage.
evidentemente, credo, il name “Form” non è quello giusto: o forse è proprio il metodo DrawPage che non appartiene a ThisComponent?.
Nel “Navigator” è presente un Drawing object “TextBox 1”.
Che cosa posso fare?
Grazie
P.S.
Prima ho messo la risposta nel posto sbagliato: perdono, è la prima volta che uso questo sito e sono veramente un dinosauro…
… come in esempio … ho fatto delle prove che ti possono essere utili …
.
… modificando contenuto cella A1 … e cliccanco sul pulsante …
.
.
Sub Aggiorna_ControlloEtichetta_FormaDisegno_CasellaTesto_Con_ContenutoCellaA1
FoglioAttivo = ThisComponent.CurrentController.ActiveSHeet
CellaA1 = FoglioAttivo.GetCellRangeByName("A1").String
Controlli = FoglioAttivo.drawpage.forms.getbyindex(0)
Controllo = Controlli.getbyName("Testo fisso 1")
Controllo.Label = CellaA1 'Cambio testo OK
Forme = FoglioAttivo.getDrawPage()
For i = 0 To Forme.Count-1
Forma = Forme.getByIndex(i)
If Forma.Name = "Forma 1" Or _
Forma.Name = "Forma 2" Or _
Forma.Name = "Cornice di testo 1" Then
Forma.Text.setString (CellaA1) 'Cambio testo OK
End If
Next
End sub
.
Test - Aggiorna_ControlloEtichetta_FormaDisegno_CasellaTesto_Con_ContenutoCellaA1.ods (23.3 KB)
Caro Lucky63,
ti ringrazio tantissimo per il aiuto ma, purtroppo, c’ è un problema.
Quando sposto su una Chart XY (che ho aggiunto) le Labels che hai messo sul tuo foglio queste vengono messe sotto il grafico e non sono più visibili (vedi “Test Lucky63.JPG”).
E’ solo un problema di ZOrder? Se questo è il caso come posso risolvere?
Per spiegarmi meglio ti allego uno “screen shot” di uno dei fogli su cui sto lavorando.
Ho aggiunto, per prova, sulla Chart, un controllo TexBox su cui ho scritto (a mano) le informazioni che che vorrei avere sul grafico, subito sotto le Labels che identificano le varie curve. I valori sono quelli delle caselle MSE: …, in giallo sotto il grafico.
Questi valori vengono ricalcolati ogni volta che, con il pulsante [Calcola Regressione], tutto il foglio viene aggiornato in funzione di nuovi parametri, e.g. quelli in giallo in alto a sinistra del foglio.
Per ora ti saluto ringraziandoti ancora per la tua attenzione.
Franco

.
… è un problema di “zorder” …
.
… seleziona l’oggetto interessato e viene delimitato (notare i quadrettini) …
EDIT: (similmente se selezioni il grafico) …
.

.
… tasto Dx mouse su area visibile > DISPONI > …
.

.
- crea il tuo (oggetto/controllo/forma/grafico) in un area libera. Trascinalo posizionandolo mantenendone una parte accavallata e una parte esterna ad altro/i
- se necessario cambiane lo “ZOrder” a tuo gradimento e poi la trascini/dimensioni/… tutta nella posizione desiderata
- …
Ciao Lucky63,
sei un MOSTRO, naturalmente nel significato latino di essere eccezionale !
Con poche righe di codice e com un esempio, mi hai risolto un problema che mi tormentava da una settimana, nonostante l’ aiuto fuorviante di ChatGPT.
Questo è il codice finale, mi perdonerai se l’ ho un po’ modificato, ma ho “scoperto” che nel mio caso, avendo “Controllo” sotto mano, potevo scrivere direttamente su di lui:
Sub ScriviInfo()
FoglioAttivo = ThisComponent.CurrentController.ActiveSHeet
Controlli = FoglioAttivo.drawpage.forms.getbyindex(0)
Controllo = Controlli.getbyName("Text Box 1")
Dim text As String
Dim titMSE1 As String, titMSE2 As String, titMSE3 As String
Dim valMSE1 As String, valMSE2 As String, valMSE3 As String
titMSE1 = FoglioAttivo.GetCellRangeByName("U49").String
titMSE1 = titMSE1 & " / N ="
valMSE1 = FoglioAttivo.GetCellRangeByName("U50").String
titMSE2 = FoglioAttivo.GetCellRangeByName("V49").String
titMSE2 = titMSE2 & " / N ="
valMSE2 = FoglioAttivo.GetCellRangeByName("V50").String
titMSE3 = FoglioAttivo.GetCellRangeByName("W49").String
titMSE3 = titMSE3 & " / N ="
valMSE3 = FoglioAttivo.GetCellRangeByName("W50").String
text = titMSE1 & CHR(10) & valMSE1 & CHR(10) _
& "---------------" & CHR(10) _
& titMSE2 & CHR(10) & valMSE2 & CHR(10) _
& "---------------" & CHR(10) _
& titMSE3 & CHR(10) & valMSE3
Controllo.Text = text
End sub
Ho usato un TextBox anzichè una Label perché questo mi permette di aggiungere (a mano) ulteriori informazioni e questo può tornarmi utile se aggiungerò la possibilità di stampare il grafico, ma questa è un’ altra storia e si vedrà…
Per ora grazie tantissime e alla prossima.
Franco
(vero dinosauro di 78+ anni, ahime!)





