Pannello di Controllo Moderatore ]

LibreOffice 7.1xx Macro (registrata) per ordinare

Discussioni sull'applicazione per i fogli di calcolo

LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda maria uni » lunedì 10 maggio 2021, 12:50

Ciao a tutti,
questo è lo scrpit che OpenOffice mi ha restiuito quando ho registato la macro. All'interno del codice vorrei passare alla MACRO il valore VALORECELLA che ho evidenziato in grassetto, perché l'ordinamento lo vorrei creare automaticamente e non impostato, ovvero l'utente specifica nella cella VALORECELLA=100 e poi cliccando sul pulsante ordina che funziona ed è correttamente collegato alla MACRO mi ordina secondo quella COLONNA... potete gentilmente spiegarmi come fare per passare il valode della cella? ho pensato così:
Calcoli = ThisComponent.Sheets(0)
VALORE CELLA= (Calcoli.getCellByPosition(8, 3).Value)+5
al valore della cella I3 voglio aggiungerci la somma del numero 5

ma non funziona..

Codice: Seleziona tutto   Espandi visualeStringi visuale
sub Main
   
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$6"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
dim tCol as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$6:[b]VALORECELLA[/b]"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(6) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ByRows"
args3(0).Value = true
args3(1).Name = "HasHeader"
args3(1).Value = false
args3(2).Name = "CaseSensitive"
args3(2).Value = false
args3(3).Name = "IncludeAttribs"
args3(3).Value = true
args3(4).Name = "UserDefIndex"
args3(4).Value = 0
args3(5).Name = "Col1"
args3(5).Value = 6
args3(6).Name = "Ascending1"
args3(6).Value = false

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args3())


end sub


DOMANDA1. in LIBREOFFICE come si fa a registrare una macro? io sono solamente riuscita in OPENOFFICE CALC a troavre il pulsante registra..
DOMANDA2. le MACRO per questione di sicurezza vanno sempre abilitate all'avvio del file. Esite un modo di ad esempio fare un pacchetto esguibile che funziona STANDALONE che avviandolo esegue come un normale programma?
DOMANDA3. i file di OPENOFFICE e LIBREOFFICE possono essere distrubuiti/condivisi come OPENSORUCE o ci sono delle limitazioni?

Grazie mille
Ultima modifica di charlie il lunedì 10 maggio 2021, 14:13, modificato 1 volta in totale.
Motivazione: formattato codice
OpenOffice 3.1 su Windows 7/ LibreOffice 7.1.3 su Windows 7
maria uni
 
*** Richiami: 1 ***
Messaggi: 9
Iscritto il: lunedì 10 maggio 2021, 12:41

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda maria uni » lunedì 10 maggio 2021, 13:13

ho trovato questo codice:
Doc = ThisComponent
Sheet = Doc.Sheets(0) ' foglio 1
VALORECELLA= Sheet.getCellRangeByName("I3").Value

come lo inserisco nel mio SCRIPT?
OpenOffice 3.1 su Windows 7/ LibreOffice 7.1.3 su Windows 7
maria uni
 
*** Richiami: 1 ***
Messaggi: 9
Iscritto il: lunedì 10 maggio 2021, 12:41

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda charlie » lunedì 10 maggio 2021, 14:09

Ciao e benvenuta sul forum.
Se intanto ti vuoi presentare, farai cosa gradita. Puoi farlo in questa sezione -> https://forum.openoffice.org/it/forum/viewforum.php?f=16

L’utente che apre un quesito si impegna:
In caso di inosservanza saremo costretti ad azioni di “richiamo”, sospensione o chiusura del profilo utente.

Buon proseguimento.
charlie
macOS 10.12 Sierra: Open Office 4.1.9 - LibreOffice 6.4.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 7547
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda Gaetanopr » lunedì 10 maggio 2021, 15:34

maria uni ha scritto:VALORE CELLA= (Calcoli.getCellByPosition(8, 3).Value)+5
al valore della cella I3 voglio aggiungerci la somma del numero 5
ma non funziona..

Cosa vuol dire ordinare secondo un valore? 100 cosa è ? è il numero di colonna? perché non puoi ordinare per valori ma per colonne in maniera ascendente o discendente.
L'indirizzo di cella I3 si scrive così
Codice: Seleziona tutto   Espandi visualeStringi visuale
Calcoli.getCellByPosition(8, 2).Value + 5

maria uni ha scritto:DOMANDA1. in LIBREOFFICE come si fa a registrare una macro? io sono solamente riuscita in OPENOFFICE CALC a troavre il pulsante registra..

Devi controllare se la funzione di registrazione delle macro sia attivata in Strumenti - Opzioni - LibreOffice - Avanzate.

Saluti
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda maria uni » lunedì 10 maggio 2021, 19:35

Gaetanopr ha scritto:
maria uni ha scritto:VALORE CELLA= (Calcoli.getCellByPosition(8, 3).Value)+5
al valore della cella I3 voglio aggiungerci la somma del numero 5
ma non funziona..

Cosa vuol dire ordinare secondo un valore? 100 cosa è ? è il numero di colonna? perché non puoi ordinare per valori ma per colonne in maniera ascendente o discendente.
L'indirizzo di cella I3 si scrive così
Codice: Seleziona tutto   Espandi visualeStringi visuale
Calcoli.getCellByPosition(8, 2).Value + 5


Si esatto 100 è il numero di RIGA ad esempio - può cambiare ma dipende da questa CELLA INPUT "I3", si voglio ordinare per colonne asc/desc
Il tuo codice come lo inserisco nella funzione?
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
dim tCol as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
VALORECELLA = Calcoli.getCellByPosition(8, 2).Value + 5
args2(0).Value = "$A$6:VALORECELLA"

torna errore.. come si inserisce per piacere.. grazie

Gaetanopr ha scritto:
maria uni ha scritto:DOMANDA1. in LIBREOFFICE come si fa a registrare una macro? io sono solamente riuscita in OPENOFFICE CALC a troavre il pulsante registra..

Devi controllare se la funzione di registrazione delle macro sia attivata in Strumenti - Opzioni - LibreOffice - Avanzate.Saluti
[/quote]

Va bene, grazie mille, verifico.

Un'ultima gentilezza ma non ho capito OpenOffice è la stessa cosa di LibreOffice? quale consigliate per elaborare con i fogli di calcolo?
OpenOffice 3.1 su Windows 7/ LibreOffice 7.1.3 su Windows 7
maria uni
 
*** Richiami: 1 ***
Messaggi: 9
Iscritto il: lunedì 10 maggio 2021, 12:41

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda maria uni » lunedì 10 maggio 2021, 22:29

ciao a tutti ho modificato così, ma continua a dare errore, come bisogna inizializzare le variabile e qual è la sintassi corretta,

ho messo la modifica alla riga

rem #################### MODIFICA ##########################


grazie mille


sub Main

rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$6"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
dim tCol as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
rem #################### MODIFICA ##########################
args2(0).Value = "$A$6:Calcoli.getCellByPosition(8, 2).Value + 5"
rem #################### MODIFICA ##########################

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(6) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ByRows"
args3(0).Value = true
args3(1).Name = "HasHeader"
args3(1).Value = false
args3(2).Name = "CaseSensitive"
args3(2).Value = false
args3(3).Name = "IncludeAttribs"
args3(3).Value = true
args3(4).Name = "UserDefIndex"
args3(4).Value = 0
args3(5).Name = "Col1"
args3(5).Value = 6
args3(6).Name = "Ascending1"
args3(6).Value = false

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args3())


end sub
OpenOffice 3.1 su Windows 7/ LibreOffice 7.1.3 su Windows 7
maria uni
 
*** Richiami: 1 ***
Messaggi: 9
Iscritto il: lunedì 10 maggio 2021, 12:41

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda Gaetanopr » lunedì 10 maggio 2021, 22:32

maria uni ha scritto:......
Si esatto 100 è il numero di RIGA ad esempio - può cambiare ma dipende da questa CELLA INPUT "I3", si voglio ordinare per colonne asc/desc
Il tuo codice come lo inserisco nella funzione?

Presumendo che l'ordinamento interessi il range da colonna A a colonna F e che VALORECELLA(dovresti essere più chiara) sia la riga finale del range l'istruzione diventa così
Codice: Seleziona tutto   Espandi visualeStringi visuale
VALORECELLA = Calcoli.getCellByPosition(8, 2).Value + 5
args2(0).Value =  "$A$6:$F$" & VALORECELLA

Essendo una variabile VALORECELLA non và inserita tra virgolette

Comunque se fai una ricerca sul forum, trovi diverse macro per fare l'ordinamento dei dati.
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda maria uni » lunedì 10 maggio 2021, 23:46

Ciao grazie per il suggerimento, FUNZIONA TUTTO ALLA GRANDE

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$6"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
dim tCol as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
Calcoli = ThisComponent.Sheets(0)
VALORECELLA = Calcoli.getCellByPosition(8, 2).Value + 5
args2(0).Value = "$A$6:$F$" & VALORECELLA
rem args2(0).Value = "$A$6:$H52"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(6) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ByRows"
args3(0).Value = true
args3(1).Name = "HasHeader"
args3(1).Value = false
args3(2).Name = "CaseSensitive"
args3(2).Value = false
args3(3).Name = "IncludeAttribs"
args3(3).Value = true
args3(4).Name = "UserDefIndex"
args3(4).Value = 0
args3(5).Name = "Col1"
args3(5).Value = 6
args3(6).Name = "Ascending1"
args3(6).Value = false

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args3())


end sub

VOLEVO CHIEDERE È POSSIBILE RICLICCARE SUL PULSANTE "ORDINA" E ORDINARE IN SENSO CRESCENTE SECONDO LA COLONNA A?
OpenOffice 3.1 su Windows 7/ LibreOffice 7.1.3 su Windows 7
maria uni
 
*** Richiami: 1 ***
Messaggi: 9
Iscritto il: lunedì 10 maggio 2021, 12:41

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda Gaetanopr » lunedì 10 maggio 2021, 23:53

Ti manca questa parte di codice
Codice: Seleziona tutto   Espandi visualeStringi visuale
Calcoli = ThisComponent.Sheets(0)

La colonna A corrisponde a col1 = 1 per adesso è impostata a 6, ti basta cambiare questo valore, puoi usare una variabile
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda maria uni » martedì 11 maggio 2021, 1:24

Gaetanopr ha scritto:Ti manca questa parte di codice
Codice: Seleziona tutto   Espandi visualeStringi visuale
Calcoli = ThisComponent.Sheets(0)

La colonna A corrisponde a col1 = 1 per adesso è impostata a 6, ti basta cambiare questo valore, puoi usare una variabile


Ciao grazie, avevo visto che mancava qualche cosa ed ho modificato il messaggio con il codice corretto, grazie mille,

ma esiste la possibilità senza stravolgere il codice che al click successivo ordina in senso crescente secondo la colonna A?

grazie
OpenOffice 3.1 su Windows 7/ LibreOffice 7.1.3 su Windows 7
maria uni
 
*** Richiami: 1 ***
Messaggi: 9
Iscritto il: lunedì 10 maggio 2021, 12:41

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda patel » martedì 11 maggio 2021, 5:58

maria uni ha scritto:Un'ultima gentilezza ma non ho capito OpenOffice è la stessa cosa di LibreOffice? quale consigliate per elaborare con i fogli di calcolo?
LibreOffice è di solito più aggiornato di OO, ma sostanzialmente si equivalgono, quindi diventa anche una questione di gusti.
maria uni ha scritto:DOMANDA3. i file di OPENOFFICE e LIBREOFFICE possono essere distrubuiti/condivisi come OPENSORUCE o ci sono delle limitazioni?
nessuna limitazione.
maria uni ha scritto:ma esiste la possibilità senza stravolgere il codice che al click successivo ordina in senso crescente secondo la colonna A?
Esiste, ma dovresti creare una ulteriore sub a cui passare il valore di col1 ed utilizzare una cella di appoggio che tenga conto della sequenza dei clic, mi sembra più semplice per ora aggiungere un secondo pulsante.
Comunque, se vuoi approfondire, allega un file di esempio funzionante
-------------------
OpenOffice 4.1 e Libre Office 6.4.1.2 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3636
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: LibreOffice 7.1xx Macro (registrata) per ordinare

Messaggioda Gaetanopr » martedì 11 maggio 2021, 9:11

maria uni ha scritto:ma esiste la possibilità senza stravolgere il codice che al click successivo ordina in senso crescente secondo la colonna A?
grazie

Nel mio precedente messaggio ti avevo risposto, comunque esistono vari modi per ottenere questo, ti faccio alcuni esempi lavorando per comodità sulla macro registrata e anche perchè ti è più familiare.
1) Come detto prima puoi usare una variabile che prende il valore da una specifica cella, come hai fatto per VALORECELLA, ad esempio se usassi la cella I4 il codice diverrebbe così
Codice: Seleziona tutto   Espandi visualeStringi visuale
sub Main
   
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
Calcoli = ThisComponent.Sheets(0)
VALORECELLA = Calcoli.getCellByPosition(8, 2).Value + 5
col1 = Calcoli.getCellByPosition(8, 3).Value
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
dim tCol as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value =  "$A$6:$F$" & VALORECELLA

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(6) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ByRows"
args3(0).Value = true
args3(1).Name = "HasHeader"
args3(1).Value = false
args3(2).Name = "CaseSensitive"
args3(2).Value = false
args3(3).Name = "IncludeAttribs"
args3(3).Value = true
args3(4).Name = "UserDefIndex"
args3(4).Value = 0
args3(5).Name = "Col1"
args3(5).Value = Col1
args3(6).Name = "Ascending1"
args3(6).Value = false

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args3())
end sub

2) Usare un inputbox dove inserire il numero di colonna 6 x F e 1 x A il codice sarebbe questo
Codice: Seleziona tutto   Espandi visualeStringi visuale
sub Main
   
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
Calcoli = ThisComponent.Sheets(0)
VALORECELLA = Calcoli.getCellByPosition(8, 2).Value + 5
col1 = Int(InputBox("Per quale colonna ordinare: ","Scelta colonna", 6))
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
dim tCol as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value =  "$A$6:$F$" & VALORECELLA

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(6) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ByRows"
args3(0).Value = true
args3(1).Name = "HasHeader"
args3(1).Value = false
args3(2).Name = "CaseSensitive"
args3(2).Value = false
args3(3).Name = "IncludeAttribs"
args3(3).Value = true
args3(4).Name = "UserDefIndex"
args3(4).Value = 0
args3(5).Name = "Col1"
args3(5).Value = Col1
args3(6).Name = "Ascending1"
args3(6).Value = false

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args3())
end sub


3) Usare una varibile Globale e ad ogni pressione del pulsante si alternerebbe l'ordinamento per colonna F e al successivo click l'ordinamento per colonna A e cosi da capo.
Codice: Seleziona tutto   Espandi visualeStringi visuale
REM  *****  BASIC  *****
Global sequenza
sub Main
   
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
Calcoli = ThisComponent.Sheets(0)
VALORECELLA = Calcoli.getCellByPosition(8, 2).Value + 5
Sequenza = Sequenza + 1
If Sequenza = 1 Then
   col1 = 6
Elseif Sequenza = 2 Then
   col1 = 1
   Sequenza = 0
End If       
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
dim tCol as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value =  "$A$6:$F$" & VALORECELLA

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(6) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ByRows"
args3(0).Value = true
args3(1).Name = "HasHeader"
args3(1).Value = false
args3(2).Name = "CaseSensitive"
args3(2).Value = false
args3(3).Name = "IncludeAttribs"
args3(3).Value = true
args3(4).Name = "UserDefIndex"
args3(4).Value = 0
args3(5).Name = "Col1"
args3(5).Value = Col1
args3(6).Name = "Ascending1"
args3(6).Value = false

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args3())


end sub

4) Intervenire direttamente sul pulsante.

Le vie sono tante e diverse dipende da te.

Saluti
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07


Torna a Calc

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti

cron