[Risolto] incollare in altro file con limite della colonna

Creare una macro - Scrivere uno script - Usare le API
Rispondi
chimico
Messaggi: 97
Iscritto il: giovedì 22 novembre 2018, 15:20

[Risolto] incollare in altro file con limite della colonna

Messaggio da chimico »

Saluti ,

per incollare in un altro foglio di calcolo con limite della colonna, ho usato il seguente comando:

Codice: Seleziona tutto

LR2 = oDoc.CurrentSelection.CellAddress.Row + 1
questo comando è nella macro del sr. patel.

ora ho bisogno di fare un altro processo, ma questa volta si incollare in un altro file , secondo la macro del sr. Gaetanopr.

così ho provato ad usare il comando in questo modo:

Codice: Seleziona tutto

LR2 = oCursor.CurrentSelection.CellAddress.Endrow + 2
ma ha accusato il seguente errore:
Proprietà o metodo non trovato: CurrentSelection
così come sarebbe fa il comando per incollare su un altro file ?
Ultima modifica di chimico il domenica 24 febbraio 2019, 6:49, modificato 1 volta in totale.
LibreOffice 5.4.4.2 no Windows 7
Avatar utente
Eramad
Volontario
Volontario
Messaggi: 278
Iscritto il: martedì 10 aprile 2018, 14:56
Località: Pistoia

Re: incollare in un altro file con limite della colonna

Messaggio da Eramad »

L'errore è dovuto dal fatto che CurrentSelection si applica (in questo caso) a oDoc e non a oCursor
Apache OpenOffice 4.1.5 su Windows 10

Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
chimico
Messaggi: 97
Iscritto il: giovedì 22 novembre 2018, 15:20

Re: incollare in un altro file con limite della colonna

Messaggio da chimico »

saluti sr. Eramad ,

ora ho usato il comando in questo modo:

Codice: Seleziona tutto

LR2 = oDoc.CurrentSelection.CellAddress.Row + 1
quindi il messaggio di errore non si è verificato più, ma inoltre non ha incollato i valori nel foglio 2 dell'altro file, come del macro sr. Gaetanopr già lo fa.

ricorda che ho bisogno di incollare i valori in un altro file, questo già funziona per il comando:

Codice: Seleziona tutto

LR2 = oCursor.rangeaddress.Endrow + 2
ma si scopre che ci sono valori nelle seguenti colonne, quindi li chiamo Incolla con Limite di colonne .

poi in macro del sr. Gaetanopr sta incollando i valori di tutte le colonne con i valori .

Ho bisogno di Cole solo dopo l'ultimo valore della colonna "A" per esempio .


amico abbraccio .
LibreOffice 5.4.4.2 no Windows 7
Avatar utente
Eramad
Volontario
Volontario
Messaggi: 278
Iscritto il: martedì 10 aprile 2018, 14:56
Località: Pistoia

Re: incollare in un altro file con limite della colonna

Messaggio da Eramad »

Prova a postare un file di esempio.

Comunque io per copiare e incollare celle da un file a un altro uso questa macro:

Codice: Seleziona tutto

Sub rangecopy

Dim oDocA As Object, oDocB As Object, oSheetA As Object, Dummy(), oRangeA as object, targetcell as object
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

oDocA = ThisComponent
oFrameA = oDocA.CurrentController.Frame
oSheetA = oDocA.getSheets.getByIndex(0)
oRangeA = oSheetA.getCellRangeByName("A1:A12") REM se vuoi copiare tutta una colonna usa oRangeA = oSheetA.Columns(0)
oDocA.CurrentController.Select(oRangeA)
oDispatcher.executeDispatch(oFrameA, ".uno:Copy", "", 0, Dummy())

oDocB = StarDesktop.loadComponentFromURL ("file:///C:/......../FileB.ods", "_blank", 0, Dummy() )
oSheetB = oDocB.getSheets.getByIndex(0)
oDocB.CurrentController.Select(targetcell)
oFrameB = oDocB.CurrentController.Frame
oSheetB = oDocB.getSheets.getByIndex(0)
oRangeB = oSheetB.getCellRangeByName("A1:A12") REM se vuoi incollare in tutta una colonna usa oRangeB = oSheetB.Columns(1)
oDocB.CurrentController.Select(oRangeB)
oDispatcher.executeDispatch(oFrameB, ".uno:Paste", "", 0, Dummy())

End Sub
Apache OpenOffice 4.1.5 su Windows 10

Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
chimico
Messaggi: 97
Iscritto il: giovedì 22 novembre 2018, 15:20

Re: incollare in un altro file con limite della colonna

Messaggio da chimico »

In allegato è il File 1 e il File 2 .

nel File 1 sono i valori visibili nell'intervallo (A7: Z54), questo intervallo può variare di dimensioni da righe e colonne .

nel foglio di lavoro 2 del File 2, sono i valori copiati dalla macro corrente .

nel foglio di lavoro 3 nel File 2 è un esempio che desidero ottenere dopo aver incollato i valori .

la nuova macro deve incollare i valori mentre viene incollata nel foglio di lavoro 3 .
Allegati
File 1.ods
(30.49 KiB) Scaricato 95 volte
File 2.ods
(13.89 KiB) Scaricato 98 volte
LibreOffice 5.4.4.2 no Windows 7
Avatar utente
Eramad
Volontario
Volontario
Messaggi: 278
Iscritto il: martedì 10 aprile 2018, 14:56
Località: Pistoia

Re: incollare in un altro file con limite della colonna

Messaggio da Eramad »

Prova questo

Ho modificato la macro così:

Codice: Seleziona tutto

sub copiafiltro

oDoc = ThisComponent
sheet1= thiscomponent.sheets(0)
   
Dim Args(1) as New com.sun.star.beans.PropertyValue 
Args(0).Name="Hidden"
Args(0).Value= False
Args(1).Name = "AsTemplate"
Args(1).value = False

file2 = StarDesktop.LoadComponentFromUrl(ConvertToURL("C:\Users\**********\Documents\Teste\File 2.ods" ) ,  "_default", 0, Args() ) 

Sheet2= file2.sheets(1)             

oCursor = Sheet1.createcursor
oCursor.gotoendofusedarea(false)
nEndrow = oCursor.rangeaddress.Endrow
oCursor = Sheet2.createcursor
oCursor.gotoendofusedarea(false)
Do While Sheet2.GetCellByPosition(0, LR2).string <> ""
	LR2 = LR2 + 1
Loop
  
ColRigheOr =  Array(0, 4, 8, 11, 20, 22)
ColDes = Array(0, 4, 5, 8, 9, 11)
   
For y = 0 To 5 step 2
	rng = sheet1.getcellrangebyPosition(ColRigheOr(y),6, ColRigheOr(y+1), nEndrow) 
	RigaIn = LR2 
	oVisibles = rng.queryVisibleCells()  
	e = oVisibles.createEnumeration()
	while e.hasMoreElements()
		rg = e.nextElement()
		a() = rg.getDataArray()
		RigaFin = RigaIn+Ubound(a)
		Sheet2.getCellRangeByPosition(ColDes(y), RigaIn, ColDes(y+1), RigaFin).setdataarray(a())
		RigaIn = RigaFin+1
	wend
Next y  

Sheet2.Columns.OptimalWidth  = True
oDoc.CurrentController.Frame.ContainerWindow.toFront()
   
end sub
(Ovviamente nel file il percorso non ha gli asterischi)
Allegati
File 1.ods
(27.82 KiB) Scaricato 100 volte
Apache OpenOffice 4.1.5 su Windows 10

Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
chimico
Messaggi: 97
Iscritto il: giovedì 22 novembre 2018, 15:20

Re: incollare in un altro file con limite della colonna

Messaggio da chimico »

sr. Eramad ,
Grazie mille, il tuo programma è stato fantastico , sta funzionando molto bene :bravo: :super:

Ho un'altra domanda che non posso risolvere . :knock:

Se voglio copiare di File 1 solo 3 colonne, ad esempio, dalla colonna "F" alla colonna "H", cioè le colonne "F", "G", "H" .

La prima parte che potevo già fare, era così:

Codice: Seleziona tutto

ColRigheOr =  Array(5, 7)
ColDes = Array(0, 2))
ma si verifica un Errore nella riga seguente:

Codice: Seleziona tutto

rng = sheet1.getcellrangebyPosition(ColRigheOr(y),6, ColRigheOr(y+1), nEndrow)
LibreOffice 5.4.4.2 no Windows 7
Avatar utente
Eramad
Volontario
Volontario
Messaggi: 278
Iscritto il: martedì 10 aprile 2018, 14:56
Località: Pistoia

Re: incollare in un altro file con limite della colonna

Messaggio da Eramad »

Ti dà errore perchè il ciclo For è impostato per ripetersi più volte ma essendoci meno valori nell'Array, cerca valori che non ci sono.

Per risolvere devi impostare il cilco For per farlo girare una volta sola.
La via più rapida è modificarlo così:

Codice: Seleziona tutto

For y = 0 To 0
Dovresti risolvere e poter copiare solo 3 colonne
Apache OpenOffice 4.1.5 su Windows 10

Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
chimico
Messaggi: 97
Iscritto il: giovedì 22 novembre 2018, 15:20

Re: incollare in un altro file con limite della colonna

Messaggio da chimico »

[RISOLTO]
Grazie mille per la tua attenzione . :super: :bravo:

Ora posso continuare con il mio progetto di ricerca . :)

Un grande abbraccio amico . :super:
LibreOffice 5.4.4.2 no Windows 7
Rispondi