[RESUELTO] macro para juntar varias hojas en una

Discute sobre la aplicación de hojas de cálculo

[RESUELTO] macro para juntar varias hojas en una

Notapor osk » Mié Dic 28, 2011 6:33 pm

Hola:

Reconozco que soy muy novato en esto de la programación pero estoy intentando buscar una macro que realice la siguiente función.

Dispongo de un libro en calc que consta de varias hojas, todas las hojas tienen el mismo formato, son tablas en las que se añaden filas con cada comentario o punto que hemos acordado con cada cliente. Me gustaría realizar una macro que me junte en una hoja nueva todos los datos que tengo en las otras hojas.

No se si esto será posible.

Muchas gracias.
osk
version open office3.3
osk
 
Mensajes: 11
Registrado: Mié Dic 28, 2011 6:23 pm

Re: macro para juntar varias hojas en una

Notapor fornelasa » Mié Dic 28, 2011 8:32 pm

Hola, Intenta con esta macro, copiala y pegala.
Esta macro crea una hoja nueva llamada "UnionDedatos" y aqui junta los datos de todas las demas hojas del libro de trabajo.

Nota Imprtante:
Cada que corras la macro asegurate de no tener una hoja llamada "UnionDeDatos" ya que si la tienes la macro al correr dará error. Si tienes esta hoja entonces primero eliminala y despues corre la macro y así la macro la creara automaticamente.

Código: Seleccionar todo   Expandir vistaContraer vista
Sub UnirHojas()
dim document as object
dim dispatcher as object
dim args1(5) as new com.sun.star.beans.PropertyValue
dim args3(0) as new com.sun.star.beans.PropertyValue
'----------------------------------------------------------------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args3(0).Name = "Sel"
args3(0).Value = true
'----------------------------------------------------------------------------------------------------------------------------
ThisComponent.Sheets.InsertNewByName("UnionDeDatos",0)
ThisComponent.CurrentController.Select(ThisComponent.Sheets(0).GetCellRangeByName("A1"))
'-----------------------------------------------------------------------------------------------------------------------------
for a = 1 to ThisComponent.Sheets.GetCount()-1
ThisComponent.CurrentController.Select(ThisComponent.Sheets(a).GetCellRangeByName("A1"))
dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
args1(0).Name = "Nr"
args1(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
args1(0).Name = "Flags"
args1(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoLeftToStartOfData", "", 0, args1())
next
'----------------------------------------------------------------------------------------------------------------------------------------
ThisComponent.CurrentController.Select(ThisComponent.Sheets(0).GetCellRangeByName("A1"))
dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args3())
args1(0).Name = "aExtraWidth"
args1(0).Value = 100
dispatcher.executeDispatch(document, ".uno:SetOptimalColumnWidth", "", 0, args1())
End Sub


Saludos, Federico.
Última edición por fornelasa el Dom Ene 29, 2017 6:56 pm, editado 1 vez en total
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: macro para juntar varias hojas en una

Notapor osk » Sab Dic 31, 2011 2:05 pm

Muchísimas gracias Federico.

La macro que has adjuntado funciona perfectamente y me hes de gran ayuda , pero como siempre nos gusta buscar la perfección , sería posible que al ejecutar la macro, esta no tenga en cuenta la información de tres hojas en concreto? En el mismo libro tengo dos hojas que contienen otro tipo de información , una es la portada o la pagina de inicio y las otras dos unas tablas para consultar tarifas con lo que no me interés que la información de estas tres hojas se vea reflejada en la hoja unión de datos.


De antemano muchísimas gracias.
osk
version open office3.3
osk
 
Mensajes: 11
Registrado: Mié Dic 28, 2011 6:23 pm

Re: macro para juntar varias hojas en una

Notapor fornelasa » Dom Ene 01, 2012 5:44 pm

Hola, para tratar de hacer lo solicitado (no tomar en cuenta tres hojas en la union de datos) tendriamos que agregar una instrucción If como en la macro que esta aqui. Estoy Suponiendo que tenemos un archivo que entre varias hojas tiene 3 que son llamadas "Uno", "Dos" y "Tres" y no queremos los datos de estas tres hojas.

Nota Imprtante:
Cada que corras la macro asegurate de no tener una hoja llamada "UnionDeDatos" ya que si la tienes la macro al correr dará error. Si tienes esta hoja entonces primero eliminala y despues corre la macro y así la macro la creara automaticamente.
Código: Seleccionar todo   Expandir vistaContraer vista
Sub UnirHojas()
dim document as object
dim dispatcher as object
dim args1(5) as new com.sun.star.beans.PropertyValue
dim args3(0) as new com.sun.star.beans.PropertyValue
'----------------------------------------------------------------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args3(0).Name = "Sel"
args3(0).Value = true
'----------------------------------------------------------------------------------------------------------------------------
ThisComponent.Sheets.InsertNewByName("UnionDeDatos",0)
ThisComponent.CurrentController.Select(ThisComponent.Sheets(0).GetCellRangeByName("A1"))
'-----------------------------------------------------------------------------------------------------------------------------
for a = 1 to ThisComponent.Sheets.GetCount()-1
ThisComponent.CurrentController.Select(ThisComponent.Sheets(a).GetCellRangeByName("A1"))
oHoja = ThisComponent.CurrentController.ActiveSheet.name
If oHoja = "Uno" Or oHoja = "Dos" Or oHoja = "Tres" Then
Goto AntesNext
End If
dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
args1(0).Name = "Nr"
args1(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
args1(0).Name = "Flags"
args1(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoLeftToStartOfData", "", 0, args1())
AntesNext:
next
'----------------------------------------------------------------------------------------------------------------------------------------
ThisComponent.CurrentController.Select(ThisComponent.Sheets(0).GetCellRangeByName("A1"))
dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args3())
args1(0).Name = "aExtraWidth"
args1(0).Value = 100
dispatcher.executeDispatch(document, ".uno:SetOptimalColumnWidth", "", 0, args1())
End Sub


Saludos, Federico.
Última edición por fornelasa el Dom Ene 29, 2017 6:58 pm, editado 1 vez en total
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: macro para juntar varias hojas en una

Notapor osk » Dom Ene 01, 2012 9:45 pm

Muchas gracias.

He probado la macro en mi archivo de calc y funciona perfectamente .

Un saludo
osk
version open office3.3
osk
 
Mensajes: 11
Registrado: Mié Dic 28, 2011 6:23 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor El Misterio 8 » Vie Ago 08, 2014 8:31 pm

Hola, he querido poner en practica la primera macro que colgaste pero al momento de querer hacerla correr me aparece este mensaje: "Error de aplicación" "No se ha definido el tipo definido por el usuario". Como lo soluciono???
OpenOffice 3.1 en Windows Vista
El Misterio 8
 
Mensajes: 1
Registrado: Vie Ago 08, 2014 8:06 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor SLV-es » Sab Ago 09, 2014 12:13 pm

Para que no de ese error en la primera macro, corrige las primeras líneas como ves aquí:

Código: Seleccionar todo   Expandir vistaContraer vista
   Dim document As Object
   Dim dispatcher As Object
   Dim a As Integer


Si prefieres utilizar la segunda, la corrección es esta:

Código: Seleccionar todo   Expandir vistaContraer vista
   Dim document As Object
   Dim dispatcher As Object
   Dim a As Integer, oHoja As String
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Avatar de Usuario
SLV-es
 
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor livermax » Sab Ene 28, 2017 2:11 pm

Buen día disculpen he intentado ejecutar la macro pero me sigue dando el mensaje de error podrían ayudarme indicándome que estoy realizando mal
livermax
 
Mensajes: 2
Registrado: Sab Ene 28, 2017 2:01 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor mauricio » Sab Ene 28, 2017 5:20 pm

Lo que estas realizando mal es la pregunta... ¿que macro "exactamente" estas intentando usar?... ¿que mensaje de error obtienes y en que línea?

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: 5867
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor livermax » Dom Ene 29, 2017 2:20 pm

Antes de nada muchas gracias por su respuesta le explico estoy intentando usar la segunda macro y obtengo un mensaje "Error de aplicación" "No se ha definido el tipo definido por el usuario me parece que se de debe a que el office que utilizo es de 64 bits podría por favor indicarme como puedo solucionar este impase de antemano agradezco su gentil apoyo.

Slds
livermax
 
Mensajes: 2
Registrado: Sab Ene 28, 2017 2:01 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor mauricio » Dom Ene 29, 2017 5:44 pm

En estos foros no damos soporte a Office...
______________________________________________
"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: 5867
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor fornelasa » Dom Ene 29, 2017 8:06 pm

Así es, recordemos que el codigo es para la aplicación Calc y no para Excel.
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor Jose_Tellez » Jue Abr 27, 2017 9:30 pm

Hola. y muchas gracias desde ya por la ayuda, lo que pasa es que estuve intentando usar esta macro, aclaro que antes usé una que también compartieron que unía muchos libros de .xls en uno solo, pero al ponerla me da el siguiente error:

BASIC runtime error.
An exception occurred
Type: com.sun.star.uno.RuntimeException
Message: .

y me selecciona esta línea:

ThisComponent.Sheets.InsertNewByName("UnionDeDatos",0)

Por favor, ¿Podrían decirme como solucionarlo o qué estoy haciendo mal?
Jose Tellez.
LibreOffice Version: 4.4.3.2
LinuxMint 17.2 Rafaela 64btis
Jose_Tellez
 
Mensajes: 4
Registrado: Jue Abr 27, 2017 8:38 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor fornelasa » Vie Abr 28, 2017 12:48 am

Necesitamos dar más detalles, por ejemplo: enviar nuestro archivo ejemplo.
Hasta donde comentas aparentemente es:
fornelasa escribió:Nota Importante:
Cada que corras la macro asegúrate de no tener una hoja llamada "UnionDeDatos" ya que si la tienes la macro al correr dará error. Si tienes esta hoja entonces primero eliminala y después corre la macro y así la macro la creara automáticamente.


Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor Jose_Tellez » Vie Abr 28, 2017 1:34 pm

Mucha gracias por su respuesta, aquí si le adjunto mi archivo, se lo pondré con las hojas que deseo juntar.

Explico un poco: Antes apliqué una macro para poder unir varios archivos .xls en uno solo, dando como resultado el archivo adjunto. Ahora lo que quiero lograr es pasar toda la información a una sola hoja, intenté usar la macro que aquí nos ofrecieron pero me aparece el error que ya mencioné, y no tengo una hoja llamada "UniondeDatos" por lo que no podré darle solución con lo que me sugeriste.

Apenas voy aprendiendo a usar las macros, por lo que el nombre en donde ubiqué las que utilicé, están según las guías de este foro y se llama "Ejemplo de Macros"

Agradezco mucho su apoyo.
Adjuntos
noviembre.ods
Este es mi archivo.
(23.29 KiB) 421 veces
Jose Tellez.
LibreOffice Version: 4.4.3.2
LinuxMint 17.2 Rafaela 64btis
Jose_Tellez
 
Mensajes: 4
Registrado: Jue Abr 27, 2017 8:38 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor fornelasa » Vie Abr 28, 2017 4:33 pm

De tu archivo la hoja Sheet1 no es necesaria.

Efectivamente con el archivo que has subido no existe la hoja "UnionDeDatos"

ummmm, ok, con los programas que dice mi firma funciona normalmente.

¿Podrías intentarlo nuevamente con el archivo ejemplo que has subido?

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor Jose_Tellez » Vie Abr 28, 2017 5:14 pm

Creo que no entendí bien lo que quisiste decirme, ¿Si intento hacerlo nuevamente con el mismo archivo no me va a aparecer nuevamente el mismo error?.
Acabo de hacerlo y así es.

Sin embargo ya solucioné mi problema, y la macro está perfecta, no tiene errores que corregir realmente.
No estoy seguro de porqué ocurre, pero ese libro fue creado con otra macro, la siguiente:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Juntar_Muchos_Cuadros
   Dim options(0) As New com.sun.star.beans.NamedValue
   
    util = createUnoService("org.universolibre.EasyDev")
   source = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")
   target = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")
   
    'Obtenemos todos los archivos ODS de la ruta especificada
    files = util.getFiles("/home/e10741/Escritorio/NOVIEMBRE", "xls")
   'Generamos un nuevo documento destino
   new_doc = util.newDoc("")
   target.Doc = new_doc
   'Abriremos los documentos de forma ocult
   options(0).Name = "Hidden"
   options(0).Value = True
   For i = LBound(files) To UBound(files)
      'Abrimos el documento
      doc = util.openDoc(files(i), options)
      source.Doc = doc
     
      'Copiamos todas las hojas del origen al destino, si tienes OpenOffice
      'util.sheetCopyToDoc(source, target, -1, True, False)
      'Copiamos todas las hojas del origen al destino, si tienes LibreOffice     
      util.sheetInsertFromDoc(source, target, -1, False)
      doc.dispose()
   Next
End Sub


Al parecer el haber creado ese libro con esta macro y después intentar aplicar la otra es lo que me produce ese error. (La macro de arriba también la saqué de este foro, creo que necesito aclarar eso)

Lo que hice fue copiar todas mis hojas y las trasladé a un nuevo archivo, en donde pude unir su información en una sola sin ningún problema.

Espero que estos detalles te sirvan tal vez para mejorar tus macros, o explicarnos el porqué de ese error, estoy muy agradecido por tu tiempo y dedicación, de verdad son muy útiles todas estas herramientas que nos ofrecen.

Saludos.
Jose Tellez.
LibreOffice Version: 4.4.3.2
LinuxMint 17.2 Rafaela 64btis
Jose_Tellez
 
Mensajes: 4
Registrado: Jue Abr 27, 2017 8:38 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor fornelasa » Vie Abr 28, 2017 7:32 pm

Ok, ya sea por bien o por mal, quiero suponer que tu consulta ha sido [RESUELTA] ¿será así?
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor Jose_Tellez » Vie Abr 28, 2017 7:54 pm

Si, no lo dije porque el post ya tiene esa calificación, pero si, mi caso quedó [Resuelto], gracias.
Jose Tellez.
LibreOffice Version: 4.4.3.2
LinuxMint 17.2 Rafaela 64btis
Jose_Tellez
 
Mensajes: 4
Registrado: Jue Abr 27, 2017 8:38 pm

Re: [RESUELTO] macro para juntar varias hojas en una

Notapor fornelasa » Vie Abr 28, 2017 8:03 pm

ok bien. :super:
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.


Volver a Calc

¿Quién está conectado?

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