[RESUELTO] Error al copiar rango. Easy Macro.

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Error al copiar rango. Easy Macro.

Notapor Dario Piedra » Sab Jul 29, 2017 4:45 pm

Buenos días estimados,

Estaba tratando de copiar un rango de celdas de un libro, a otro libro usando easy macro. (usando OpenOffice 4.1.3 32bit)
Mi código es el siguiente:
Código: Seleccionar todo   Expandir vistaContraer vista
from libo import LIBO

app = LIBO()

def main():
   doc_origen = app.get_doc('Origen.ods')
   hoja_origen = doc_origen.active
   rango_origen = hoja_origen['A1:A4']
   #hay algunos msgbox (bastantes) es para confirmar que cada dato seleccionado sea correcto.
   app.msgbox(doc_origen.title) #muestra el libro correcto.
   app.msgbox(hoja_origen) #resultado mostrado es = Libo.LOCalcSheet object at 0x0FDC7990
   app.msgbox(rango_origen.address)#muestra el rango correcto.
   
   doc_destino = app.get_doc('Destino.ods')
   hoja_destino = doc_destino.active
   app.msgbox(doc_destino.title) #muestra el libro correcto.
   app.msgbox(hoja_destino) #resultado mostrado es = Libo.LOCalcSheet object at 0x0FDC7DF0
   celda_destino = doc_destino.sheets['1']['A1'].get_next_cell()
   app.msgbox(celda_destino.address) #Si uso .get_next_cell() muestra el segundo error adjunto.
   rango_origen.move(celda_destino)
   
   return
   

Si realizo un cambio y en la celda_destino no uso la sentencia .get_next_cell(), me muestra la celda seleccionada de forma correcta pero el error se refleja al momento de ejecutar la sentencia rango_origen.move(celda_destino)

Código: Seleccionar todo   Expandir vistaContraer vista
   celda_destino = doc_destino.sheets['1']['A1']
   app.msgbox(celda_destino.address) #Muestra la hoja y celda correcta.
   rango_origen.move(celda_destino)#Aquí se muestra el primer error adjunto.


Por lo que pude ver en el error creo que hace referencia al siguiente atributo:
Código: Seleccionar todo   Expandir vistaContraer vista
    def __getitem__(self, index):
        if PY2:
            return self._get_item(index)
        return LOCalcSheet(self._obj[index])


Agradezco la ayuda que me puedan brindar para identificar el error.
Adjuntos
Error # 6.2.PNG
Error sin get_next_cell().
Error # 6.1.PNG
Error con get_next_cell().
Última edición por Dario Piedra el Sab Jul 29, 2017 9:14 pm, editado 1 vez en total
Windows 7 - Windows 10.
OpenOffice 4.1.3 32 Bit.
Dario Piedra
 
Mensajes: 23
Registrado: Mié Jul 26, 2017 9:57 pm

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 5:35 pm

Hola...

Ya vi mi error... el problema es que OpenOffice no soporta aun la referencia directa por indice (slice), creí que ya lo había resuelto, pero me falto esa línea... lo arreglamos en un rato...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Error al copiar rango. Easy Macro.

Notapor Dario Piedra » Sab Jul 29, 2017 5:55 pm

Comprendo Mauricio,

Estaré atento, te agradezco de antemano la ayuda.

Saludos.
Windows 7 - Windows 10.
OpenOffice 4.1.3 32 Bit.
Dario Piedra
 
Mensajes: 23
Registrado: Mié Jul 26, 2017 9:57 pm

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 6:20 pm

Listo, he probado el mover en OpenOffice... pero acabo de caer en la cuenta que ahora LibreOffice usa primeros las filas y luego columnas, y OpenOffice usa primero columnas y despues filas para referirse a rangos... espero haber validado en todos los casos...

Por favor, actualiza y prueba nuevamente.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Error al copiar rango. Easy Macro.

Notapor Dario Piedra » Sab Jul 29, 2017 7:14 pm

Muchísimas gracias Mauricio, muy amable.
Efectivamente ya no se muestra el error, sin embargo tengo una duda:

Código: Seleccionar todo   Expandir vistaContraer vista
def main():
   doc_origen = app.get_doc('Origen.ods')
   hoja_origen = doc_origen.active
   rango_origen = hoja_origen['A1:A4']
   
   doc_destino = app.get_doc('Destino.ods')
   hoja_destino = doc_destino.active
   celda_destino = doc_destino.sheets['1']['A1']

   rango_origen.move(celda_destino)
   return

Según yo, el código debería escoger el rango de celdas 'A1:A4', del libro y hoja de origen, y pegarlo en la celda 'A1', de la hoja '1' del documento de destino.
Sin embargo cuando lo ejecuto solo hace esto:
1- Desaparece la celda 'A1' del libro de origen.
2- No aparece nada en la celda 'A1' del libro destino.

Probé cambiar el rango por este formato: (col:fil, col:fil)
Código: Seleccionar todo   Expandir vistaContraer vista
rango_origen = hoja_origen[0:0, 0:3]

Sin embargo al hacer ese cambio, obtuve el error adjunto.

Te agradezco la ayuda que me puedas brindar,

Saludos.
Adjuntos
Error 7.PNG
Windows 7 - Windows 10.
OpenOffice 4.1.3 32 Bit.
Dario Piedra
 
Mensajes: 23
Registrado: Mié Jul 26, 2017 9:57 pm

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 7:54 pm

Si tienes:
Código: Seleccionar todo   Expandir vistaContraer vista
   hoja_destino = doc_destino.active
   celda_destino = doc_destino.sheets['1']['A1']

Entonces ya deberías de tener hoja_destino, por lo que celda_destino debe quedar:
Código: Seleccionar todo   Expandir vistaContraer vista
celda_destino = hoja_destino['A1']

pero si seleccionas otros documento que NO es el activo, mi recomendación es que uses referencia directa a la hoja, y no a la activa:
Código: Seleccionar todo   Expandir vistaContraer vista
celda_destino = doc_destino.sheets['1']['A1']

Toma nota de que estas referenciando la hoja que se llama '1', por que estas usando las comillas, si quieres hacer referencia a la hoja 1 (recuerda que empiezan en cero), entonces pasalo como un entero, sin las comillas.
Código: Seleccionar todo   Expandir vistaContraer vista
celda_destino = doc_destino.sheets[1]['A1']

Pruebas y nos cuentas...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Error al copiar rango. Easy Macro.

Notapor Dario Piedra » Sab Jul 29, 2017 8:19 pm

Buenas tardes Mauricio,

Probé con los cambios que me indicas dejando del código de esta forma:

Código: Seleccionar todo   Expandir vistaContraer vista
def main():
   doc_origen = app.get_doc('Origen.ods')
   hoja_origen = doc_origen.active
   rango_origen = hoja_origen['A1:A4']
   
   doc_destino = app.get_doc('Destino.ods')
   #hoja_destino = doc_destino.sheets[0] #estas líneas están comentadas para poder
   #celda_destino = hoja_destino['A1']#probar con la línea de abajo. en mis pruebas utilicé las dos formas.
   celda_destino = doc_destino.sheets[0]['A1']

   rango_origen.move(celda_destino)
   return


El resultado es el mismo, desaparece la primera la celda ['A1'] del documento origen, y no aparece nada en el documento destino.
Hice adicional las siguientes pruebas:
Cambie celda destino por este valor:
Código: Seleccionar todo   Expandir vistaContraer vista
celda_destino = doc_destino.sheets[0]['A6']


Y el resultado es el siguiente: movió las celdas ['A2:A4'] a las posiciones ['A6:A8'], esto en la misma hoja del libro origen. (es decir, las movió de campo dentro del mismo libro y la misma hoja. La celda ['A1'] se quedó donde estaba.
Adicional está el problema de no poder seleccionar rangos en formato [col:fil, col:fil]

Saludos.
Windows 7 - Windows 10.
OpenOffice 4.1.3 32 Bit.
Dario Piedra
 
Mensajes: 23
Registrado: Mié Jul 26, 2017 9:57 pm

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 8:29 pm

Ya veo... mover celdas solo funciona entre hojas del mismo libro, así funciona el método tanto de LibreOffice como de OpenOffice... para mover celdas entre libros, realmente lo que hay que hacer:

1.- Obtener los datos origen
2.- Copiarlos al destino
3.- Eliminar el origen

Por supuesto, la idea de Easy-Macro es facilitar las cosas, voy a validar si el origen y destino son diferentes archivos y actuar en consecuencia, de este modo, podemos dejar el método como esta y le damos el plus que buscamos.

Estén al pendiente.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Error al copiar rango. Easy Macro.

Notapor Dario Piedra » Sab Jul 29, 2017 8:33 pm

Interesante, entonces la limitante es del mismo software.

En ese caso el método para copiar de un libro a otro sería el método copy_data?
Esto lo pregunto porque adicional al método move, probé el método copy y tuve el mismo resultado, copió la información en la misma hoja y libro de origen.

Saludos.
Última edición por Dario Piedra el Sab Jul 29, 2017 8:36 pm, editado 1 vez en total
Windows 7 - Windows 10.
OpenOffice 4.1.3 32 Bit.
Dario Piedra
 
Mensajes: 23
Registrado: Mié Jul 26, 2017 9:57 pm

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 8:35 pm

Así es, pero con Easy-Macro, lo vamos a mejorar... espera mis noticias...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Error al copiar rango. Easy Macro.

Notapor Dario Piedra » Sab Jul 29, 2017 8:38 pm

Quisiera tener más conocimiento para apoyar más... Gracias nuevamente por toda la ayuda brindada.
Estaré atento.
Windows 7 - Windows 10.
OpenOffice 4.1.3 32 Bit.
Dario Piedra
 
Mensajes: 23
Registrado: Mié Jul 26, 2017 9:57 pm

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 8:46 pm

Primera prueba... actualiza la librería y pruebas con el siguiente código:
Código: Seleccionar todo   Expandir vistaContraer vista
    origen = app.get_doc('Origen.ods').sheets[0]['A1'].current_region
    destino = app.get_doc('Destino.ods').sheets[0]['A1']

    destino.data = origen.data
    origen.clear()

Lo he probado en OpenOffice y mueve los datos correctamente entre los libros...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 8:58 pm

Ya me acorde que para eso eso hice el copy_data, he validado en OpenOffice...
Código: Seleccionar todo   Expandir vistaContraer vista
    origen.copy_data(destino)
    origen.clear()
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Error al copiar rango. Easy Macro.

Notapor Dario Piedra » Sab Jul 29, 2017 9:01 pm

Es una completa maravilla.
Y lo mejor, si deseo mantener el origen por temas de "respaldo", basta solo con no agregar la sentencia:
Código: Seleccionar todo   Expandir vistaContraer vista
origen.clear()


Mauricio, increíble la ayuda, realmente agradecido.
Windows 7 - Windows 10.
OpenOffice 4.1.3 32 Bit.
Dario Piedra
 
Mensajes: 23
Registrado: Mié Jul 26, 2017 9:57 pm

Re: Error al copiar rango. Easy Macro.

Notapor mauricio » Sab Jul 29, 2017 9:10 pm

Gracias por validar... esto nos permite tener una librería madura y lista para producción...

Saludos

P.D. No olvides marcar como resuelto
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 173 invitados