Copiar hoja completa de un libro a otro

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

Copiar hoja completa de un libro a otro

Notapor Millocai » Sab May 28, 2016 11:44 am

Hola, quiero copiar una hoja existente de otro libro abierto al actual que contiene una hoja del mismo nombre. Había pensado hacer un bucle y copiar celda a celda pero me parece muy lento de ejecución ya que habría que copiar texto y color de fondo de cada celda para que quede exactamente igual.

Desconozco si esto se puede hacer con una simple instrucción que copie hojas completas aunque sean de diferentes libros, o si hay alguna macro sencilla y sobre todo rápida de ejecución. ¿Alguien puede darme luz en esta oscuridad? ¿Como lo harían?
OpenOffice 4.1.2 en Windows 10
Millocai
 
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Notapor mauricio » Sab May 28, 2016 2:35 pm

______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Copiar hoja completa de un libro a otro

Notapor Millocai » Dom May 29, 2016 11:05 am

Muchas gracias por tu respuesta Mauricio, no conocía eso, pero no consigo hacerlo funcionar, podrías decirme lo que hago mal? El objetivo es copiar la hoja Resumen de hoja2 (el usuario indica el nombre del archivo) en la hoja resumen de thiscomponent.
Me sale el mensaje de error variable de objeto no establecida.
Código: Seleccionar todo   Expandir vistaContraer vista
Sub importar()
   Dim hoja2, archivo as object
   Dim ruta, nombre as string
   Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
   Dim util, source, target as object
   Dialoglibraries.Loadlibrary("Standard")
   Hoja = thiscomponent.sheets(0)
   Hoja.unprotect ("WILSON SOFT")
   celda = hoja.getcellbyposition (17,13)
   ruta = convertToUrl(celda.getformula)
   nombre = pidedatos ("NOMBRE DEL ARCHIVO A IMPORTAR")
   ruta = ruta + "/" + nombre
   If FileExists (ruta) and nombre <> "" Then
      FileProperties(0).Name = "Hidden"
      FileProperties(0).Value = True
      archivo = starDeskTop.loadComponentFromUrl (ruta, "_blank", 0, FileProperties())
      hoja2 = archivo.sheets().getbyname ("Resumen")
      hoja = thiscomponent.sheets().getbyname ("Resumen")
      Hoja.unprotect ("WILSON SOFT")
      util = createUnoService("org.universolibre.EasyDev")
      source = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")
      target = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")
      source.doc = hoja2
      target.doc = util.newDoc(hoja)
      util.sheetCopyToDoc(souce, target, 2, True, False)
      Hoja.protect ("WILSON SOFT")
      archivo.close (True)
   Else
      msgbox "NO ES POSIBLE ENCONTRAR EL FICHERO EN LA RUTA INDICADA"
   End if
End Sub
OpenOffice 4.1.2 en Windows 10
Millocai
 
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Notapor mauricio » Dom May 29, 2016 4:32 pm

Siempre es bueno que indiques en que línea te marca el error...

¿Instalaste EasyDev?: http://easydev.readthedocs.io/es/latest ... stallation

Primero instala EasyDev, has la prueba que viene ahí, en cuanto este todo bien, pasa a tu macro... todo eso que quieres hacer lo puedes hacer con EasyDev, por ejemplo, abrir un documento: http://easydev.readthedocs.io/es/latest ... html#abrir

Si usas LibreOffice, hay un mejor método para insertar una hoja de otro archivo: http://easydev.readthedocs.io/en/latest ... m-document

Para quitar o poner contraseña a una o varias hojas: http://easydev.readthedocs.io/en/latest ... t-password

Veras como tu código se va a reducir considerablemente y sobre todo, se va a hacer mucho más claro... intentalo nuevamente y te voy guiando.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Copiar hoja completa de un libro a otro

Notapor Millocai » Dom May 29, 2016 7:45 pm

No sabía que tenía que instalar nada, yo uso openoffice 4.1.2 es compatible? mañana lunes lo instalaré y probaré.
OpenOffice 4.1.2 en Windows 10
Millocai
 
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Notapor Millocai » Lun May 30, 2016 11:44 am

Hola Mauricio, te cuento que lo instalé y en la prueba me sale versión 2.6.0. y en mi código me da error en la ultima linea que te muestro ahora. El error que me dá es variable de objeto no establecida
Código: Seleccionar todo   Expandir vistaContraer vista
   Dim util, source, target as object



Código: Seleccionar todo   Expandir vistaContraer vista
   archivo = starDeskTop.loadComponentFromUrl (ruta, "_blank", 0, FileProperties())
   hoja2 = archivo.sheets().getbyname ("Resumen")
   hoja = thiscomponent.sheets().getbyname ("Resumen")
   Hoja.unprotect ("WILSON SOFT")
   util = createUnoService("org.universolibre.EasyDev")
   source = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")
   target = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")
   source.doc = archivo
   source.sheet = hoja2
   target.doc = thiscomponent
   util.sheetCopyToDoc(souce, target, 2, True, False) Rem EN ESTA LINEA ME DA EL ERROR
OpenOffice 4.1.2 en Windows 10
Millocai
 
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Notapor mauricio » Lun May 30, 2016 9:07 pm

Millocai escribió: util.sheetCopyToDoc(souce, target, 2, True, False) Rem EN ESTA LINEA ME DA EL ERROR

No es lo mismo source que souce

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Copiar hoja completa de un libro a otro

Notapor Millocai » Mar May 31, 2016 10:18 am

Que fallo mas tonto, tenias razón Mauricio gracias, ya lo copia pero a surgido un error inesperado e incomprensible para mi, una vez copia la hoja la macro se rompe saliendo este mensaje:
Imagen

Pero lo mejor es luego, al captar esta imagen para enseñartela, ejecuto la macro y ya no se rompe, saliendo en la primera celda libre de la hoja destino esta misma imgen. :shock: :shock:
Y ya no se rompe mas la macro saliendo esta imagen en cada ejecución, si borro la imagen de mi disco duro y reinicio el pc, vuelvo a ejecutar la macro y se vuelve a romper.
Sabes por que puede ser?
OpenOffice 4.1.2 en Windows 10
Millocai
 
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Notapor mauricio » Mar May 31, 2016 2:25 pm

Explico un poco como funciona el copiado completo en OpenOffice... en LibreOffice esto esta resuelto con una línea, pero en OpenOffice hay que hacer circo, maroma y teatro...

Primero se enlaza la hoja en el nuevo libro, después se rompe el vínculo entre hojas, después se copian las imágenes que tenga el origen en el destino.

Copiando todas las hojas funciona correctamente, intentando copiar solo una hoja por nombre se reproduce el problema. Felicidades, haz encontrado un bug (error), lo reviso y en cuanto lo arregle te aviso por aquí.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Copiar hoja completa de un libro a otro

Notapor Millocai » Mié Jun 01, 2016 7:05 am

Mil gracias Mauricio crack, eres un fenómeno. Espero tu respuesta.
OpenOffice 4.1.2 en Windows 10
Millocai
 
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Notapor Millocai » Sab Jun 04, 2016 1:08 pm

Se podría inhabilitar el copiado de imágenes?, ya que copia todo el contenido y luego falla, pero el copiado lo hace perfecto antes de romperse la macro. De este modo si se pudiese obviar el copiado de imágenes que ademas en mi caso no las hay, todo estaría perfecto.
OpenOffice 4.1.2 en Windows 10
Millocai
 
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Notapor mauricio » Sab Jun 04, 2016 5:21 pm

He vuelto a verificar y el error que estaba obteniendo es diferente al que muestras tu... prueba a ejecutar la macro Main del archivo anexo y mira que funciona correctamente...

Algunas cosas más que observo en tu código. La siguiente línea es incorrecta, si bien no es causa del error, es causa de un vicio:
Código: Seleccionar todo   Expandir vistaContraer vista
   Dim util, source, target as object

Lo correcto es:
Código: Seleccionar todo   Expandir vistaContraer vista
   Dim util As Object, source As Object, target As Object

Si vas a usar EasyDev, aprovecha todas sus funciones, para abrir un archivo de forma oculta:
Código: Seleccionar todo   Expandir vistaContraer vista
Dim options(0) As New com.sun.star.beans.NamedValue
util = createUnoService("org.universolibre.EasyDev")

options(0).Name = "Hidden"
options(0).Value = True
path = "/home/USER/Plantilla.ods"
doc = util.openDoc(path, options1)

También tienes métodos para trabajar con fácil con los valores de las celdas y las rutas:
http://easydev.readthedocs.io/en/latest ... cell-value
http://easydev.readthedocs.io/en/latest ... nd-folders

Si sigues con el mismo error, entonces anexa el archivo para ver que pasa.

Saludos
Adjuntos
Untitled 1.ods
(10.73 KiB) 112 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Macros y API UNO

¿Quién está conectado?

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