Copiar hoja completa de un libro a otro

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Millocai
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Copiar hoja completa de un libro a otro

Mensaje por Millocai »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar hoja completa de un libro a otro

Mensaje por mauricio »

______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Millocai
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Mensaje por Millocai »

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

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar hoja completa de un libro a otro

Mensaje por mauricio »

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
Millocai
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Mensaje por Millocai »

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

Mensaje por Millocai »

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

	Dim util, source, target as object

Código: Seleccionar todo

	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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar hoja completa de un libro a otro

Mensaje por mauricio »

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
Millocai
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Mensaje por Millocai »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar hoja completa de un libro a otro

Mensaje por mauricio »

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
Millocai
Mensajes: 22
Registrado: Lun Nov 04, 2013 12:38 pm

Re: Copiar hoja completa de un libro a otro

Mensaje por Millocai »

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

Mensaje por Millocai »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar hoja completa de un libro a otro

Mensaje por mauricio »

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

   Dim util, source, target as object
Lo correcto es:

Código: Seleccionar todo

   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

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) Descargado 309 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder