explicacion de lo que hace el codigo

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
jhonfredy
Mensajes: 47
Registrado: Vie Abr 08, 2016 6:50 pm

explicacion de lo que hace el codigo

Mensaje por jhonfredy »

Cordial saludo,

Me pueden explicar que hace este código paso a paso pues no estoy muy familiarizado con este tema:

Código: Seleccionar todo

sub BuscarCopiar
 dim args1(2) as new com.sun.star.beans.PropertyValue

 document = ThisComponent.CurrentController.Frame
 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 args1(1).Name = "By"
 args1(1).Value = 1
 args1(2).Name = "Sel"
 args1(2).Value = false
 tDoc = ThisComponent.CurrentController
 oSheet = tDoc.ActiveSheet

 tDoc.Select(oSheet.GetCellRangeByName("A1"))
 dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())

 Edgar = ThisComponent.Sheets.GetByName("edgar")
 args1(0).Name = "SearchItem.SearchString"
 args1(0).Value = "EDGAR FRANCISCO SOTO"

 dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

 inicio = (ThisComponent.GetCurrentSelection.CellAddress.Row + 1)

 dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())

 dato = ThisComponent.GetCurrentSelection.String
 args1(0).Value = Trim(dato)

 dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

 fin = (ThisComponent.GetCurrentSelection.CellAddress.Row + 1)
 rango = oSheet.GetCellRangeByName("A"+inicio+":K"+fin)

 tDoc.Select(Rango)
 dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
 tDoc.Select(Edgar.GetCellRangeByName("A1"))
 dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
 tDoc.Select(oSheet.GetCellRangeByName("A1"))

 args1(0).Name = "SearchItem.SearchString"
 args1(0).Value = "EDGAR FRANCISCO SOTO"

 dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
 MsgBox "Hecho"
end sub
Última edición por jhonfredy el Jue Oct 20, 2016 2:03 pm, editado 2 veces en total.
OpenOffice 3.1 en Windows Vista
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: explicacion de lo que hace el codigo

Mensaje por fornelasa »

uchale!!!, vamos por partes, en cuanto tenga más tiempo intentaré explicar todo, por el momento voy en:

Código: Seleccionar todo

dim args1(2) as new com.sun.star.beans.PropertyValue
    'Le avisamos a Calc con la instrucción "dim" que utilizaremos una variable llamada args1
    'Dicha variable contará con "tres lugares" para almacenar datos y tendrá una estructura similar a:
    'args1(0).Name = "SearchItem.SearchString"
    'args1(0).Value = "EDGAR FRANCISCO SOTO"
    'args1(1).Name = "By"
    'args1(1).Value = 1
    'args1(2).Name = "Sel"
    'args1(2).Value = false
    'Lo anterior será explicado lineas abajo
    
document = ThisComponent.CurrentController.Frame 
    'A partir de este momento el archivo activo se llamará "document"
   

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
	'A partir de este momento la "persona" que nos ayudará y buscara los datos se llamará "dispatcher"

     
args1(1).Name = "By"
args1(1).Value = 1
args1(2).Name = "Sel"
args1(2).Value = false
	'By y 1 significarían "muevete un paso"
	'By y 2 por ejemplo significarian "muevete dos pasos"
	'Sel y false, si "muevete un paso" a la derecha estando en A10 llegarias a B10
	'Sel y true, si muevete un paso a la derecha estando en A10 obtendriamos A10:B10     
     
tDoc = ThisComponent.CurrentController  
    'A partir de este momento el "controlador" se llamará "tDoc", esta linea es necesaria porque es la "ruta" para llegar a la hoja activa

oSheet = tDoc.ActiveSheet
    'A partir de este momento la hoja activa se llamará "oSheet" (Hoja desde la cual se ejecuta la macro)


tDoc.Select(oSheet.GetCellRangeByName("A1"))
    'Seleccionamos la celda A1 para que desde ahi se iniciel la busqueda     


dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())     
    'Esta instruccion equivale a pulsar la tecla "flecha izquierda" y utiliza:
    'args1(1).Name = "By"
    'args1(1).Value = 1
    'args1(2).Name = "Sel"
    'args1(2).Value = false 

Edgar = ThisComponent.Sheets.GetByName("edgar")
    'A partir de este momento la hoja edgar se llamará Edgar               
     
args1(0).Name = "SearchItem.SearchString"
args1(0).Value = "EDGAR FRANCISCO SOTO"
    'Lo que vamos a buscar   

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
    'Lo buscamos, mira args1, aqui el cursor se desplaza a donde esta "EDGAR FRANCISCO SOTO"
    'Obvio si lo encuentra.
     
     
inicio = (ThisComponent.GetCurrentSelection.CellAddress.Row + 1)
    'La celda donde se encuentra "EDGAR FRANCISCO SOTO" se llamará "inicio"
   
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())
    'Esta instruccion equivale a pulsar la tecla "flecha izquierda"       
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
jhonfredy
Mensajes: 47
Registrado: Vie Abr 08, 2016 6:50 pm

Re: explicacion de lo que hace el codigo

Mensaje por jhonfredy »

Genial fornelasa, lo que ha explicado lo he entendido. Espero la continuación.

Mil gracias
OpenOffice 3.1 en Windows Vista
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: explicacion de lo que hace el codigo

Mensaje por fornelasa »

uchale!!! ya se me había olvidado.
No es mi fuerte documentar macros, me da muchísima flojera, créeme que hecho un esfuerzo supremo.
Espero que con esto se entienda.

Código: Seleccionar todo

                   
'Cuando la macro encuentra el rotulo "EDGAR FRANCISCO SOTO" el indicador de celda
'se desplaza a la celda que contiene dicho rotulo, que en este caso ya dijimos
'es la celda "inicio"'y que está en la columna B,
'por eso es necesario pulsar el equivalente a la
'tecla flecha izquierda para desplazarmos a la columna A
'en donde esta el codigo A802
                  
            dato = ThisComponent.GetCurrentSelection.String
'A802 lo almacenamos en la variable dato  
            
  args1(0).Value = Trim(dato)
'Si dato tuviera espacios en blanco Trim los elimina para dejar totalmente puro el texto A802
'y que no pudiera quedar por ejemplo A802_espacio_espacio_espacio
'Ahora vamos a buscar hacia abajo A802  
  
 dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
'lo buscamos y nos desplazamos a donde este A802 otra vez                   
                   
             fin =  (ThisComponent.GetCurrentSelection.CellAddress.Row + 1)
'Determinamos en que fila esta A802 nuevamente
             
           rango = oSheet.GetCellRangeByName("A"+inicio+":K"+fin)
'Aqui determinamos todo el rectangulo o rango desde inicio hasta fin
'es decir todo el rango de datos de Edgar
           
               tDoc.Select(Rango)
               dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
               tDoc.Select(Edgar.GetCellRangeByName("A1"))
               dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
               tDoc.Select(oSheet.GetCellRangeByName("A1"))
'Seleccionamos el rango y lo copiamos a donde deba ser. nota la hoja Edgar               
               
   args1(0).Name = "SearchItem.SearchString"
  args1(0).Value = "EDGAR FRANCISCO SOTO"
  
               dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
               MsgBox "Hecho"
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
jhonfredy
Mensajes: 47
Registrado: Vie Abr 08, 2016 6:50 pm

Re: explicacion de lo que hace el codigo

Mensaje por jhonfredy »

Mil gracias
OpenOffice 3.1 en Windows Vista
Responder