[Calc] differente comportamento macro tra LO 6.x e 7.x

Creare una macro - Scrivere uno script - Usare le API
Rispondi
paolomoe
Messaggi: 9
Iscritto il: martedì 4 giugno 2013, 14:44

[Calc] differente comportamento macro tra LO 6.x e 7.x

Messaggio da paolomoe »

Questa macro funzionava con libreoffice 6.x e precedenti, ma con la nuova versione non funziona più quando cerco di intercettare celle unite.
(con la LO 7.x funziona solo quando si tratta di intercettare celle singole)

Codice: Seleziona tutto

 sub StampaTestoCella
 oSheet = ThisComponent.CurrentController.ActiveSheet
 oActiveCell = ThisComponent.getCurrentSelection() 'intercetto la cella attiva
 testo = oActiveCell.string
 print testo
 end sub
potete darmi una mano?
grazie mille
P.
Ultima modifica di charlie il lunedì 31 gennaio 2022, 17:23, modificato 1 volta in totale.
Motivazione: Titolo semplificato
openofficie 3.1 - liboffice 3.5 - liboffice 4.2
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8820
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: [Calc] differente comportamento macro tra LO 6.x e 7.x

Messaggio da charlie »

Più che non funzionare, va in errore :roll:
"Proprietà o metodo non trovato"
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: [Calc] differente comportamento macro tra LO 6.x e 7.x

Messaggio da nickGiard »

Ciao paolomoe
se la tua intenzione è quella di dedicarti alla programmazione, sappi che casi come quello che esponi sono molto frequenti.
Per risolverli non c' è altro modo che attivare il debug ed eseguire il codice passo passo e vedere il valore delle variabili.
Nel tuo caso di celle unite oActiveCell assume (forse più correttamente?) il tipo CellRange, ossia un intervallo di celle e non più una cella singola, per cui non esiste la Proprietà string ed il codice ovviamente dà errore.
In questo caso devi integrare la istruzione così : oActiveCell.getCellByPosition(0, 0).string
Attenzione che questo funziona solo per i Range, per cui dovrai fare un IF che controllo il tipo di oActiveCell, ad esempio usando il metodo getIsMerged().
In alternativa il metodo DataArray funziona sempre, potresti usarlo e prelevare il valore (0)(0).
Più che darti una risposta ti consiglierei un metodo anche se un pò impegnativo, ossia familiarizzare con SDK di LibreOffice, dove trovi tutti gli oggetti di questo ambiente, con le relative proprietà e metodi, in questo caso com.sun.star.sheet.SheetCellRange, ed ovviamente studiare il testo di Andrew Pitonyak OpenOffice.org Macros Explained.
Saluti Nicola :) :) :)
Nicola con LibreOffice 7.1 (x64) su Windows 11
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2997
Iscritto il: martedì 18 maggio 2010, 17:01

Re: [Calc] differente comportamento macro tra LO 6.x e 7.x

Messaggio da lucky63 »

.
Prova così:
.

Codice: Seleziona tutto

Sub TestoDellaCellaSelezionata
Rem Link del quesito = https://forum.openoffice.org/it/forum/viewtopic.php?t=11604
Doc              = ThisComponent
FoglioAttivo     = Doc.CurrentController.ActiveSheet
CellaSelezionata = Doc.getCurrentSelection
ColonnaInizio = CellaSelezionata.RangeAddress.StartColumn
RigaInizio    = CellaSelezionata.RangeAddress.StartRow
TestoCellaSelezionata = FoglioAttivo.getCellByPosition(ColonnaInizio,RigaInizio).String
MsgBox ( TestoCellaSelezionata , 0 , "Testo:")
End Sub
.
Allegati
Test - Macro - TestoDellaCellaSelezionata.ods
(13.51 KiB) Scaricato 42 volte
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: [Calc] differente comportamento macro tra LO 6.x e 7.x

Messaggio da nickGiard »

Certo che esistono varie soluzioni, sarebbe interessante capire quale e' la più veloce, o la più elegante, o la più didattica....
Nicola con LibreOffice 7.1 (x64) su Windows 11
Rispondi