[Risolto] Selezione di celle non contigue in Calc

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

[Risolto] Selezione di celle non contigue in Calc

Messaggio da giuserpe »

Ciao,
solitamente, per alcune operazioni, uso selezionare un range di celle con questo sistema

Codice: Seleziona tutto

ThisComponent.CurrentController.select(oRange)
Com'è possibile effettuare la selezione di celle non contigue?
Grazie
Ultima modifica di giuserpe il martedì 21 agosto 2018, 11:43, modificato 1 volta in totale.
LibreOffice fresh su Windows e Linux
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Selezione di celle non contigue in Calc

Messaggio da patel »

Perché le vuoi selezionare ? cosa ci vuoi fare dopo ?
-------------------
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
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: Selezione di celle non contigue in Calc

Messaggio da giuserpe »

La mia intenzione è copiarle in un altro foglio. Ho già pronto l'occorrente per farlo e ci riesco con selezioni standard. Qui di seguito hai i due script in Python che utilizzo. Ovviamente ne servono altri che non metto qui per brevità, ma se lo ritieni necessario posso mostrarteli.

Codice: Seleziona tutto

def copy_clip(arg=None):
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.CurrentController.ActiveSheet
    ctx = XSCRIPTCONTEXT.getComponentContext()
    desktop = XSCRIPTCONTEXT.getDesktop()
    oFrame = desktop.getCurrentFrame()

    dispatchHelper = ctx.ServiceManager.createInstanceWithContext( 'com.sun.star.frame.DispatchHelper', ctx )
    dispatchHelper.executeDispatch(oFrame, ".uno:Copy", "", 0, list())
########################################################################
def paste_clip(arg=None):
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.CurrentController.ActiveSheet
    ctx = XSCRIPTCONTEXT.getComponentContext()
    desktop = XSCRIPTCONTEXT.getDesktop()
    oFrame = desktop.getCurrentFrame()

    dispatchHelper = ctx.ServiceManager.createInstanceWithContext( 'com.sun.star.frame.DispatchHelper', ctx )
    dispatchHelper.executeDispatch(oFrame, ".uno:Paste", "", 0, list())
    oDoc.CurrentController.select(oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")) #'unselect
LibreOffice fresh su Windows e Linux
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Selezione di celle non contigue in Calc

Messaggio da hubert lambert »

Ciao giuserpe,

Ecco un esempio:

Codice: Seleziona tutto

    doc = XSCRIPTCONTEXT.getDocument()
    ranges = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
    range1 = doc.Sheets.getCellRangeByPosition(0,0,0,9,0).RangeAddress  # -> Foglio1.D1:A10
    range2 = doc.Sheets.getCellRangeByPosition(3,0,3,9,0).RangeAddress  # -> Foglio1.D1:A10
    ranges.addRangeAddresses((range1, range2), True)
    doc.CurrentController.select(ranges)
Saluti.
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: Selezione di celle non contigue in Calc

Messaggio da giuserpe »

Grazie mille,
come al solito siete preziosissimi.
LibreOffice fresh su Windows e Linux
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Selezione di celle non contigue in Calc

Messaggio da patel »

Ciao Hubert, hai anche una versione basic ?
la riga ranges.addRangeAddresses((range1, range2), True) mi da errore
-------------------
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
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: [Risolto] Selezione di celle non contigue in Calc

Messaggio da hubert lambert »

Ciao patel,

In python, (range1, range2) (che si chiama un "tuple") è l'equivalente del basic array(range1, range2).
Cordiali saluti ;) .
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Rispondi