PDA

Visualizza la versione completa : [OPENOFFICE CALC] Recupero dati da tutti i fogli presenti tramite macro


luisa227
01-06-2012, 13:12
Ho una serie di fogli + altri 2 fogli di riepilogo all'interno di un file.

In tutti i fogli presenti (tranne i 2 riepiloghi) devo estrapolare dei dati e inserirli nella scheda di un riepilogo elencandoli a partire dalla riga 14.

Esempio:

Devo recuperare il contenuto della cella B7 di ogni foglio e inserirlo all'interno delle celle del foglio di riepilogo a partire dalla cella A14, quindi ad es. la cella B7 del foglio1 conterrà AAA e dovrò inserirlo in A14, poi il foglio2 conterrà FRA e dovrò inserirlo nella cella A15 e cosi via.

Immagino di dover fare una specie di ciclo for per dirgli "estrapolami i dati di ogni foglio tranne gli ultimi 2 fogli" ma come si fa? Potete aiutarmi? grazie

ho iniziato facendo così ma non so andare avanti

codice:
oCalcDocument = ThisComponent
oSheets = oCalcDocument.getSheets()

For I = 0 to oSheets.Count -4
oCalcSheet = oSheets.getByIndex(I)
oCalcSheet.Name

Next I


al posto del codice in grassetto dovrei dirgli: prendimi il valore della cella b7 e inseriscimela nellascheda di riespilogo a partire dalla a14...

luisa227
01-06-2012, 14:27
questo è quello che ho combinato fino ad ora...
su un foglio solo funziona ma se ho piu fogli mi da errore su dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())
e mi dice sequence element is not asignable by given value... aiutatemi! devo finirlo entro oggi pomeriggio!



SUB DISTINTA

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")


dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$14"

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

dim OBJSTS as object ' VAR. OGGETTO x INSIEME SHEETS
dim IDSH as integer ' VAR. NUMERICA x CONTEGGIO SHEETS
dim NMSH as string ' VAR, PER NOME SHEET DI CICLO
OBJSTS = thiscomponent.sheets ' ACQUISISCO OGGETTO INSIEME SHEETS
for IDSH = 0 to OBJSTS.count - 5 ' CICLO SU CONTEGGIO SHEETS
NMSH = OBJSTS.getbyindex(IDSH).name ' SCRIVO NOME SHEET DI CICLO IN VAR.






oCalcDocument = ThisComponent
oSheets = oCalcDocument.getSheets()
oSheet = oSheets(idsh)
oCell = oSheet.getCellByPosition(1, 6) ' b7
msgbox "Prova contenuto b7 fogli: " & ocell.string & " " & idsh



thiscomponent.currentcontroller.activesheet = _
thiscomponent.sheets.getbyname("DISTINTA")

'------------------------------------------------------------------------
rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "StringName"

args6(0).Value = ocell.string

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())
next IDSH ' CHIUDO CICLO SU ELENCO SHEETS


rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
END SUB

luisa227
04-06-2012, 16:05
nessuno sa dirmi dove sbaglio? deve essere una cavolata! attendo, grazie!

Ho pacioccato fino ad ottenere questo modo: ho ottenuto l'elenco a partire dalla riga a14 della distinta, mi fa il ciclo ma mi scrive sempre in tutte le celle il valore della cella B7 del primo foglio MENTRE NEL A15 DOVREBBE SCRIVERE IL VALORE DELLA CELLA DEL SECONDO FOGLIO E COSI VIA... AIUTOOOOOO!!! URGENTEEEE



SUB DISTINTA

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")
thiscomponent.currentcontroller.activesheet = _
thiscomponent.sheets.getbyname("DISTINTA")

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$14"

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

dim OBJSTS as object ' VAR. OGGETTO x INSIEME SHEETS
dim IDSH as integer ' VAR. NUMERICA x CONTEGGIO SHEETS
dim NMSH as string ' VAR, PER NOME SHEET DI CICLO
OBJSTS = thiscomponent.sheets
dim args6(400) as new com.sun.star.beans.PropertyValue

for IDSH = 0 to OBJSTS.count - 5 ' CICLO SU CONTEGGIO SHEETS
NMSH = OBJSTS.getbyindex(IDSH).name ' SCRIVO NOME SHEET DI CICLO IN VAR.






oCalcDocument = ThisComponent
oSheets = oCalcDocument.getSheets()
oSheet = oSheets(idsh)
oCell = oSheet.getCellByPosition(1, 6) ' b7
' msgbox "Prova contenuto b7 fogli: " & ocell.string & " " & idsh



thiscomponent.currentcontroller.activesheet = _
thiscomponent.sheets.getbyname("DISTINTA")

'------------------------------------------------------------------------
rem ----------------------------------------------------------------------
'dim args6(6) as new com.sun.star.beans.PropertyValue
args6(idsh).Name = "StringName"
'args6(0).Value = "='" & nomefoglio &"'.j16" ' DA CHANCE IN BASE A ULTIMA DATA - VEDI FORUM ------------------------------------------------------
args6(idsh).Value = ocell.string
msgbox idsh
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())

idsh=idsh +1
next IDSH ' CHIUDO CICLO SU ELENCO SHEETS


rem ----------------------------------------------------------------------


END SUB

Loading