Copiar hoja completa de un libro a otro
Copiar hoja completa de un libro a otro
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?
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
Re: Copiar hoja completa de un libro a otro
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Copiar hoja completa de un libro a otro
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.
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
Re: Copiar hoja completa de un libro a otro
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
¿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
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Copiar hoja completa de un libro a otro
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
Re: Copiar hoja completa de un libro a otro
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
Re: Copiar hoja completa de un libro a otro
No es lo mismo source que souceMillocai escribió: util.sheetCopyToDoc(souce, target, 2, True, False) Rem EN ESTA LINEA ME DA EL ERROR
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Copiar hoja completa de un libro a otro
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:
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.
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?
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.
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
Re: Copiar hoja completa de un libro a otro
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
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
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Copiar hoja completa de un libro a otro
Mil gracias Mauricio crack, eres un fenómeno. Espero tu respuesta.
OpenOffice 4.1.2 en Windows 10
Re: Copiar hoja completa de un libro a otro
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
Re: Copiar hoja completa de un libro a otro
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:
Lo correcto es:
Si vas a usar EasyDev, aprovecha todas sus funciones, para abrir un archivo de forma oculta:
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
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
Código: Seleccionar todo
Dim util As Object, source As Object, target As Object
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)
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
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro