[Risolto] semplicemente copia/scambia una colonna su un'al

Discussioni sull'applicazione per i fogli di calcolo
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

[Risolto] semplicemente copia/scambia una colonna su un'al

Messaggio da cater58 »

sono alle prime armi e uso libreoffice
devo semplicemente creare una macro che mi scambi due colonne con i relativi dati
quindi colonna b del file, va sopra la colonna f dello stesso file, e viceversa.
tutto qui
potete aiutarmi ?
grazie mille
gianni
Ultima modifica di cater58 il sabato 16 settembre 2017, 21:46, modificato 1 volta in totale.
Libreoffice 2.2.3 con MacOS 10.4
Avatar utente
gioh66
Volontario assiduo
Volontario assiduo
Messaggi: 1906
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da gioh66 »

Lo devi fare in modo ripetitivo o ti serve solo una volta? Nel secondo caso ti basta selezionare la colonna, cominciare a spostarla, premere il tasto ALT e quando sei in prossimità del bordo dx o sx della colonna, a seconda della direzione in cui sposti (il puntatore cambia forma), rilasciare il mouse.
https://youtu.be/rEmp78xqewY
...se sei soddisfatto delle risposte ricevute metti il [Risolto] viewtopic.php?f=9&t=5661

Libreoffice 25.8 LinuxMint 21/22
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

grazie per l'interessamento ...

noi, la devo usare continuamentew in concomitanza con altre istruzioni della macro e vorrei comunque liberarmi di libreoffice e farlo con openoffice

la macro che ho gia fatto cancella delle colonne inutili.
a questa macro andrebbe aggiunte le istruzione per fare in modo che due colonne si scambino di posizione (quindi la colonna 2 deve andare al posto della 5 e viceversa)

... a mano so come fare
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

di fatto si tratta di un CVS (delimitatore virgola) che scarico da un sito, e che va successivamente caricato in un altro.

le differenze di impostazione delle colonne dei due siti mi rendono necessario un lavoro di routine sul file stesso

a seguire avro bisogno della vostra gentilezza anche per altre info - sono cose semplici per che maneggia VBA o macro da anni
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

Scambiare il posto di due colonne , niente altro.
... sembra strano ma non riesco a trovare nulla... trovo tutte soluzioni di cose piu complicate!
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

proprio nessuno sa come farlo?
Libreoffice 2.2.3 con MacOS 10.4
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 9068
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da charlie »

Ciao, visto che ancora non lo hai fatto, se vuoi presentarti puoi farlo in questa sezione: viewforum.php?f=16
Poi, per essere meglio aiutato prova a postare un file di esempio (senza dati sensibili). Probabilmente si può impostare una macro con il registratore.
charlie
macOS 15.5 Sequoia: Open Office 4.1.16 - LibreOffice 25.8
http://www.charlieopenoffice.altervista.org
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

il registratore mi rende una registrazione ma non funziona
ora vedo chi posso fare
grazie
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

allegato prova (in ods ma l'originale è csv - non è permesso allegare csv)

in pratica:

1) i dati sotto la colonna comments devono andare sotto la colonna location - ma le caselle dove c'e' scritto comment e location (le prime caselle delle colonne) devono rimanere dove sono senza modifiche
2) i dati della colonna comments devono riportare TUTTI una steinga (es "Prova"

questo è quanto ...

questa macro deve essere aggiunta ad una esistente che ho gia realizzato io ... per aggiungerla basta inserire le istruzioni nella precedente macro?

grazie mille per l'aiuto
Gianni
Allegati
prova.ods
(9.09 KiB) Scaricato 166 volte
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

ecco come dovrebbe essere ...
Allegati
PROVA OK.ods
(8.59 KiB) Scaricato 143 volte
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

ancora provato con registratore ... ma non pare capire che fare
questo è il codice che salva la macro:

Codice: Seleziona tutto

Sub Main
REM CANCELLA COLONNE INDESIDERATE - questa la ho fatta io
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.removeByIndex(0, 6)
Sheet.Columns.removeByIndex(1, 1)
Sheet.Columns.removeByIndex(2, 1)
Sheet.Columns.removeByIndex(6, 4)

end sub

sub Main2 - QUESTA E' STATA REGISTRATA  E DOVREBBE FARE CIO CHE MI SERVE
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

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

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

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

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$G$1"

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


end sub
Libreoffice 2.2.3 con MacOS 10.4
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 9068
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da charlie »

Ciao, non sono esperto di macro.
Ne ho reperita qualcuna (magari non troppo ortodossa), adattata e assegnata ciascuna all'azione di un pulsante
L'unica cosa che manca per ora è la selezione della colonna attiva, ma tanto vale farlo con un clic.
Vedi se ti possono servire.
Allegati
Inverti colonne.ods
(14.81 KiB) Scaricato 169 volte
charlie
macOS 15.5 Sequoia: Open Office 4.1.16 - LibreOffice 25.8
http://www.charlieopenoffice.altervista.org
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da patel »

ciao cater58, come intendi indicare le colonne da scambiare ? sono sempre le stesse ?
-------------------
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
lucky63
Volontario molto attivo
Volontario molto attivo
Messaggi: 3094
Iscritto il: martedì 18 maggio 2010, 17:01

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da lucky63 »

cater58 ha scritto:in pratica:
1) i dati sotto la colonna comments devono andare sotto la colonna location - ma le caselle dove c'e' scritto comment e location (le prime caselle delle colonne) devono rimanere dove sono senza modifiche
2) i dati della colonna comments devono riportare TUTTI una steinga (es "Prova"
questo è quanto ...

Codice: Seleziona tutto

Sub SpostaDatiDa_C_a_F
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
UltimaRiga = c.RangeAddress.EndRow

For Riga = 1 to UltimaRiga
Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
Sh1.getCellByPosition(2, Riga).string = "PROVA"
Next Riga

End Sub
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

si le colonne da spostare sono sempre quelle.
ora provo la soluzione di lucky63
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

Codice: Seleziona tutto

REM  *****  BASIC  *****

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------

REM CANCELLA COLONNE INDESIDERATE

sub main
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.removeByIndex(0, 6)
Sheet.Columns.removeByIndex(1, 1)
Sheet.Columns.removeByIndex(2, 1)
Sheet.Columns.removeByIndex(6, 4)

end sub

Sub SpostaDatiDa_C_a_F

doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
UltimaRiga = c.RangeAddress.EndRow

For Riga = 1 to UltimaRiga
Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
Sh1.getCellByPosition(2, Riga).string = "PROVA"
Next Riga

End Sub
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

come mai non funziona?
credo di far casino nell' appendere le due macro...in effetti trovo difficile come si gestiscono le macro e dove salvarle.
..
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da patel »

neanche a me funziona, allega un file con la situazione iniziale e quella desiderat
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

patel li ho gia allegati guarda sopra
prova è come è
prova ok come dovrebbe essere
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da patel »

allora funziona perfettamente, ti allego il file con la macro, così vedi dove deve stare
Allegati
prova(1).ods
(11.83 KiB) Scaricato 125 volte
-------------------
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
lucky63
Volontario molto attivo
Volontario molto attivo
Messaggi: 3094
Iscritto il: martedì 18 maggio 2010, 17:01

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da lucky63 »

cater58 ha scritto:questa macro deve essere aggiunta ad una esistente che ho gia realizzato io ... per aggiungerla basta inserire le istruzioni nella precedente macro?
Puoi editare la tua macro con le dovute accortezze e farne una sola o in alternativa utilizzare l'istruzione "CALL NomeDellaMacroDaFarEseguire" da inserire prima della riga "END SUB" della tua macro come segue.
cater58 ha scritto:a macro che ho gia fatto cancella delle colonne inutili.
a questa macro andrebbe aggiunte le istruzione per fare in modo che due colonne si scambino di posizione (quindi la colonna 2 deve andare al posto della 5 e viceversa)
Così in risposta al tuo primo quesito

Codice: Seleziona tutto


REM  *****  BASIC  *****

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------

REM CANCELLA COLONNE INDESIDERATE

sub main
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.removeByIndex(0, 6)
Sheet.Columns.removeByIndex(1, 1)
Sheet.Columns.removeByIndex(2, 1)
Sheet.Columns.removeByIndex(6, 4)

call SpostaDatiDa_C_a_F '<<<<<<=====questa riga richiama l'altra macro =======
end sub


Sub SpostaDatiDa_C_a_F
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
UltimaRiga = c.RangeAddress.EndRow

For Riga = 1 to 3 'UltimaRiga
DatoCella = Sh1.getCellByPosition(6, Riga).string
Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
Sh1.getCellByPosition(2, Riga).string = DatoCella
Next Riga

End Sub
cater58 ha scritto:in pratica:

1) i dati sotto la colonna comments devono andare sotto la colonna location - ma le caselle dove c'e' scritto comment e location (le prime caselle delle colonne) devono rimanere dove sono senza modifiche
2) i dati della colonna comments devono riportare TUTTI una steinga (es "Prova"

questo è quanto ...
Così in risposta alla tua seconda esigenza.

Codice: Seleziona tutto

   

REM  *****  BASIC  *****

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------

REM CANCELLA COLONNE INDESIDERATE

sub main
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.removeByIndex(0, 6)
Sheet.Columns.removeByIndex(1, 1)
Sheet.Columns.removeByIndex(2, 1)
Sheet.Columns.removeByIndex(6, 4)

call SpostaDatiDa_C_a_F '<<<<<<=====questa riga richiama l'altra macro =======
end sub


 Sub SpostaDatiDa_C_a_F
 doc=thiscomponent
    Sh1 = Doc.Sheets(0)
    c = Sh1.createCursor
    c.gotoEndOfUsedArea(false)
    UltimaRiga = c.RangeAddress.EndRow

    For Riga = 1 to UltimaRiga
    Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
    Sh1.getCellByPosition(2, Riga).string = "PROVA"
    Next Riga

    End Sub
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

Codice: Seleziona tutto

REM  *****  BASIC  *****

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------

REM CANCELLA COLONNE INDESIDERATE

sub main
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.removeByIndex(0, 6)
Sheet.Columns.removeByIndex(1, 1)
Sheet.Columns.removeByIndex(2, 1)
Sheet.Columns.removeByIndex(6, 4)

call SpostaDatiDa_C_a_F '<<<<<<=====questa riga richiama l'altra macro =======
end sub

call inserisce_prova
end sub

end sub (della main)

Sub SpostaDatiDa_C_a_F
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
UltimaRiga = c.RangeAddress.EndRow

For Riga = 1 to 3 'UltimaRiga
DatoCella = Sh1.getCellByPosition(6, Riga).string
Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
Sh1.getCellByPosition(2, Riga).string = DatoCella
Next Riga

End Sub

Sub inserisce_prova
doc=thiscomponent
    Sh1 = Doc.Sheets(0)
    c = Sh1.createCursor
    c.gotoEndOfUsedArea(false)
    UltimaRiga = c.RangeAddress.EndRow

    For Riga = 1 to UltimaRiga
    Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
    Sh1.getCellByPosition(2, Riga).string = "PROVA"
    Next Riga
    end sub
Ultima modifica di cater58 il giovedì 14 settembre 2017, 19:22, modificato 1 volta in totale.
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

ho capito bene?

... sicuro no. :-(
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

Codice: Seleziona tutto

REM ***** BASIC *****

rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------

sub main
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.removeByIndex(0, 6)
Sheet.Columns.removeByIndex(1, 1)
Sheet.Columns.removeByIndex(2, 1)
Sheet.Columns.removeByIndex(6, 4)

call SpostaDatiDa_C_a_F
call inserisce_prova
end sub

Sub SpostaDatiDa_C_a_F
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
UltimaRiga = c.RangeAddress.EndRow

For Riga = 1 to 3 'UltimaRiga
DatoCella = Sh1.getCellByPosition(6, Riga).string
Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
Sh1.getCellByPosition(2, Riga).string = DatoCella
Next Riga
End Sub

Sub inserisce_prova
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
UltimaRiga = c.RangeAddress.EndRow

For Riga = 1 to UltimaRiga
Sh1.getCellByPosition(6, Riga).string = Sh1.getCellByPosition(2, Riga).string
Sh1.getCellByPosition(2, Riga).string = "PROVA"
Next Riga
end sub
Ultima modifica di cater58 il giovedì 14 settembre 2017, 19:22, modificato 1 volta in totale.
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

questa funziona ... l'unica cosa è che alla fine della procedura mi pare cancelli il valore delle prime tre righe nella colonna location ...
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

questo è il file iniziale
Allegati
corto.ods
(10.17 KiB) Scaricato 100 volte
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

questo il file dopo la macro (compresa della parte da me fatta dove cancello le colonne inutili)
Allegati
cortodopomacro.ods
(8.85 KiB) Scaricato 117 volte
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

IL FILE CORTO è IN EFFETTI IL PRIMO FILE DA CUI IL LAVORO DEVE PARTIRE
applicando la macro:

- cancella delle colonne
- spostamento le due colonne comments e location
- inserisce "prova" nella colonna comments

... ma io vedo i tre valori delle tre prime righe al campo location sbiancate, e non lo dovrebbe fare

brw : grazie ora ho capito come appendere le macro!!! - :-)
Libreoffice 2.2.3 con MacOS 10.4
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 9068
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da charlie »

@carter58, proprio non vuoi mettere i tag al codice delle macro? :x Serve a non allungare troppo i post. Quindi sei invitato formalmente a farlo. Grazie.
Edit: anche sui post già inseriti, modificandoli.
charlie
macOS 15.5 Sequoia: Open Office 4.1.16 - LibreOffice 25.8
http://www.charlieopenoffice.altervista.org
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: semplicemente copia/scambia una colonna su un'altra

Messaggio da cater58 »

okok
Libreoffice 2.2.3 con MacOS 10.4
Rispondi