[Risolto] Importare range variabile

Creare una macro - Scrivere uno script - Usare le API
Rispondi
epico
Messaggi: 58
Iscritto il: mercoledì 4 giugno 2014, 11:53

[Risolto] Importare range variabile

Messaggio da epico »

Salve, mi servirebbe una macro che:
dal fileB.xls foglio1 deve importare il range variabile A2:G(LastRow) come stringhe
nel fileA.ods foglio corrente (da dove faccio partire la macro) dalla cella A2

Io sono riuscito solo a importare o solo una cella o tutto il foglio!

Sub Importa
dim m()
path = ConvertToUrl("W:\DOWN\exported-list.xls")
oDoc1 = StarDesktop.loadComponentFromUrl(path,"_default" , 0, m())
stxt = oDoc1.Sheets(0).getCellByPosition(0,1).getString()
oDoc = ThisComponent
oDoc.Sheets(2).getCellByPosition(0,1).setString(stxt)
oDoc1.Close(true)
End sub

Senza aprire e chiudere il fileB è possibile?

Grazie
Ultima modifica di epico il mercoledì 4 giugno 2014, 21:25, modificato 1 volta in totale.
OpenOffice 4.1 su Win10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Importare range variabile

Messaggio da patel »

Perché senza aprirlo ? forse non vuoi che si veda il file aperto ? in questo caso

Codice: Seleziona tutto

Sub rangecopyfrom
Dim oDocA As Object, oDocB As Object, oSheetA As Object, Dummy(),oRangeA as object, targetcell as object
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim args(0) As New com.sun.star.beans.PropertyValue
oDocA = ThisComponent
oFrameA = oDocA.CurrentController.Frame
oSheetA = oDocA.getSheets.getByIndex(0)
adresseDoc = ConvertToURL("E:\prova\indice.xls") ' <<<<< da cambiare
args(0).Name  = "Hidden"
args(0).Value = true
oDocB=StarDesktop.loadComponentFromURL(adresseDoc,"_blank",0, args()) 
oSheetB = oDocB.getSheets.getByIndex(0)
oFrameB = oDocB.CurrentController.Frame
c = oSheetA.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 1
oRangeB = oSheetB.getCellRangeByName("A2:G" & LastRow) ' <<<<< da cambiare
oDocB.CurrentController.Select(oRangeB)
oDispatcher.executeDispatch(oFrameB, ".uno:Copy", "", 0, Dummy())
targetcell= oSheetA.getCellRangeByName("A2") ' <<<<< da cambiare
oDocA.CurrentController.Select(targetcell)
oFrameA = oDocA.CurrentController.Frame
oDispatcher.executeDispatch(oFrameA, ".uno:Paste", "", 0, Dummy())
oDocB.close(true)
End Sub
-------------------
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
epico
Messaggi: 58
Iscritto il: mercoledì 4 giugno 2014, 11:53

Re: Importare range variabile

Messaggio da epico »

Si è ok, però ha importato il range A1:G2
allora ho cambiato
c = oSheetA.createCursor
con
c = oSheetB.createCursor

Ho aggiunto alla fine
oDispatcher.executeDispatch(oFrameA, ".uno:GoUp", "", 0, Dummy())
per evitare che il range importato rimanga selezionato

[Perché senza aprirlo ? ...]
Non c'è nessun motivo particolare, solo una mia curiosità

Grazie
OpenOffice 4.1 su Win10
Rispondi