[RESUELTO] Copiar Rango y Pegar en otra Hoja"Crear Registro"

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Edhir
Mensajes: 2
Registrado: Dom Feb 02, 2020 10:29 am

[RESUELTO] Copiar Rango y Pegar en otra Hoja"Crear Registro"

Mensaje por Edhir »

Hola a todos, estoy intentando crear un mini_proyecto para la gestión de mi actividad diaria en Calc. Me están surgiendo muchas dudas y estoy aprendiendo a base de prueba y error, y como no también gracias a la inestimable ayuda de la comunidad a la que agradezco su esfuerzo en toda la documentación que tiene y aporta.

Parto de la lectura con un lector de código de barras de un código de 20 dígitos (que trato como texto para su análisis), tras realizar varias comprobaciones con él en la hoja1 deseo crear un registro si se dan ciertas condiciones y para ello deseo crear una macro que haga lo siguiente:

1º copie un rango de la hoja1 (ejemplo $hoja1.D1:D5)
2ª vaya a la celda $hoja2.A2 y haga un pegado especial (ó inserción) en esa celda añadiendo los valores de (textos, fechas y números) realizando una trasposición y desplazando las celdas hacia abajo.
3º finalmente que vuelva el foco de introducción de datos a la casilla $hoja1.A1 donde estoy obteniendo las lecturas del lector.

He intentado simplificar un ejemplo en el libro que adjunto "ejemplo.ods" para que veáis a que me refiero y la condición en la que crea el registro, la he reducido a pulsar un botón.

Actualmente tengo para lo que quiero una macro creada con "crear macro" que he intentado reproducir en el ejemplo que adjunto pero con un resultado negativo (funciona la primera vez, pero luego siempre pega el primer valor que le pasé) ((me refiero a" resultado negativo" a que en la que tengo con mis datos, mas compleja, ahora funciona, pero en el momento que hago algún cambio por mínimo que sea deja de trabajar.., osea que a mi entender tienen un comportamiento no predecible). y por ello querría hacer algo mas controlado.

Agradeciendo de antemano vuestra atención y esperando poder colaborar poco a poco en lo que vaya aprendiendo, un saludo.

PD: le he dado formato previo a cada casilla para que albergue fechas, números o textos..
Adjuntos
ejemplo.ods
ejemplo (no funciona como espero con "crear macro"
(12.81 KiB) Descargado 198 veces
Última edición por Edhir el Mié Feb 12, 2020 11:08 pm, editado 2 veces en total.
LibreOffice 6.4.0.3 (x64), Windows 10 Home
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Copiar Rango Celdas y Pegarlos en otra Hoja "Crear Regis

Mensaje por FJCC-ES »

Código: Seleccionar todo

oHoja1 = ThisComponent.Sheets.getByName("Hoja1")
D1_D5 = oHoja1.getCellrangeByName("D1:D5")
Datos = D1_D5.DataArray

oHoja2 = ThisComponent.Sheets.getByName("Hoja2")
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
oHoja2.insertCells(A2_E2.RangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
Datos2 = A2_E2.DataArray

for i = 0 to 4
   Datos2(0)(i) = Datos(i)(0)
next i
A2_E2.DataArray = Datos2

A1 = oHoja1.getCellrangeByName("A1")
ThisComponent.CurrentController.select(A1)
Edhir
Mensajes: 2
Registrado: Dom Feb 02, 2020 10:29 am

Re: Copiar Rango Celdas y Pegarlos en otra Hoja "Crear Regis

Mensaje por Edhir »

FJCC-ES escribió:

Código: Seleccionar todo

oHoja1 = ThisComponent.Sheets.getByName("Hoja1")
D1_D5 = oHoja1.getCellrangeByName("D1:D5")
Datos = D1_D5.DataArray

oHoja2 = ThisComponent.Sheets.getByName("Hoja2")
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
oHoja2.insertCells(A2_E2.RangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
Datos2 = A2_E2.DataArray

for i = 0 to 4
   Datos2(0)(i) = Datos(i)(0)
next i
A2_E2.DataArray = Datos2

A1 = oHoja1.getCellrangeByName("A1")
ThisComponent.CurrentController.select(A1)
Mil gracias FJCC-ES por tu rápida y efectiva respuesta, probado y funcionando correctamente.

Ahora me pongo a estudiarlo, entenderlo y trastear su funcionamiento, me va a venir de perlas para saber como manejar dentro de las macros las referencias a celdas hojas con arrays que me tenía un poco perdido. Prometo estudiar mas :)

Subo el archivo con la solución propuesta por si a alguien le interesa.
Adjuntos
ejemplo.ods
ejemplo que realiza lo que quería funcionando correctamente
(12.34 KiB) Descargado 271 veces
LibreOffice 6.4.0.3 (x64), Windows 10 Home
Responder