Spostamento dati in calc con marco

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Spostamento dati in calc con marco

Messaggio da UTPiovene »

La mia Amministrazione è (finalmente) passata a OOo ... non senza dolore: ho alcuni fogli excel in cui tengo nota delle spese delle forniture.
Nelle prime tre colonne ho i dati dei DDT (nr, data e importo).
Una volta ricevuta la fattura sposto il range delle tre celle contenenti i dati in altre a cui fa riferimento la fattura.
In questo modo ho una colonna con il totale delle spese in sospeso (DDT) e una colonna con le fatture pagate, in maniera da avere sempre sott'occhio la disponibilità del capitolo di spesa.
Lo spostamento dei dati lo facevo con una macro per velocizzare l'operazione. Ovviamente i riferimenti della macro alle celle non erano assoluti, ma, come base per lo spostamento, si rifacevano alla cella attiva (ActiveCell) e venivano spostati di tot. colonne (Offset).
Non trovo la corrispondenza nelle macro di OOo.
Per fare in modo che la macro prenda come base per lo spostamento del range la cella attiva che comando si usa?
Per spostare di un certo numero di colonne a partire dalla cella attiva il range selezionato che comando si usa?

Grazie
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
Avatar utente
FncZ4pp4
Messaggi: 285
Iscritto il: domenica 2 gennaio 2011, 20:32

Re: Spostamento dati in calc con marco

Messaggio da FncZ4pp4 »

Se ho capito bene vuoi copiare dati di 3 celle su altre tre, per fare questo io uso questo script:


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 = "$B$78:$B$80"

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$K$78"

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

rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVDFN"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())


end sub


Ovviamente i riferimenti di celle le devi adattare con quelle che ti servini, la copia in questo caso esclude la copia del formato cella. Spero che ti sia stato di aiuto. ;)
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
OpenOffice 3.3 su Windows XP
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: Spostamento dati in calc con marco

Messaggio da UTPiovene »

Scusa se rispondo solo oggi.
Provo a capire come funziona e di conseguenza come modificarla.
Non sai se c'è da qualche parte un manuale che spieghi i comandi come funzionano e la sintassi da usare?
Grazie
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: Spostamento dati in calc con marco

Messaggio da UTPiovene »

Ho provato la macro, è quasi uguale a quella che avevo creato con il registratore di marco.
Io ho bisogno che i riferimenti non siano assoluti (del tipo$A$1) perchè l'esecuzione va ripetuta di volta in volta su righe diverse.
Quello che io avevo impostato in Excel prendeva la cella attiva come riferimento per lo spostamento dei dati, selezionava il range di 3 celle (quella attiva e quelle 2 a lato), spostava la cella attiva sulla stessa riga di n. colonne e incollava i dati.
Poi tornava indietro di n-2 colonne, scriveva "fatt.", quindi si spostava all'inizio però una riga sotto.
Ho capito più o meno il funzionamento della macro di Calc, ma non avendo nessun manuale di istruzioni, non so come fare a dare i riferimenti relativi alla cella attiva e gli spostamenti che non facciano riferimento a celle specifiche.

Spero di essere stato spiegato.
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
Avatar utente
FncZ4pp4
Messaggi: 285
Iscritto il: domenica 2 gennaio 2011, 20:32

Re: Spostamento dati in calc con marco

Messaggio da FncZ4pp4 »

UTPiovene ha scritto:Ho provato la macro, è quasi uguale a quella che avevo creato con il registratore di marco.
Io ho bisogno che i riferimenti non siano assoluti (del tipo$A$1) perchè l'esecuzione va ripetuta di volta in volta su righe diverse.
Quello che io avevo impostato in Excel prendeva la cella attiva come riferimento per lo spostamento dei dati, selezionava il range di 3 celle (quella attiva e quelle 2 a lato), spostava la cella attiva sulla stessa riga di n. colonne e incollava i dati.
Poi tornava indietro di n-2 colonne, scriveva "fatt.", quindi si spostava all'inizio però una riga sotto.
Ho capito più o meno il funzionamento della macro di Calc, ma non avendo nessun manuale di istruzioni, non so come fare a dare i riferimenti relativi alla cella attiva e gli spostamenti che non facciano riferimento a celle specifiche.

Spero di essere stato spiegato.
Ho capito, vedi se ti va bene questo:

Codice: Seleziona tutto

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(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "By"
args1(0).Value = 2
args1(1).Name = "Sel"
args1(1).Value = true

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "By"
args4(0).Value = 2
args4(1).Name = "Sel"
args4(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args4())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem ----------------------------------------------------------------------
dim args7(1) as new com.sun.star.beans.PropertyValue
args7(0).Name = "By"
args7(0).Value = 4
args7(1).Name = "Sel"
args7(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args7())

end sub
Come vedi non ci sono riferimenti di celle ma solo i valori degli spostamenti dalla cella origine che intendevi fare.
Allegati
Documento1.ods
(10.88 KiB) Scaricato 264 volte
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
OpenOffice 3.3 su Windows XP
Rispondi