[RESUELTO] guardar copia de hoja de cálculo específica

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

[RESUELTO] guardar copia de hoja de cálculo específica

Notapor physic » Vie Dic 07, 2018 12:01 pm

saludos ,

         he encontrado un código del sr. Maurício , que se adapta muy bien para resolver mi problema viewtopic.php?f=50&t=2832#p9016

         es necesario generar una copia de una hoja de cálculo específica y guardar en otro directorio con el nombre encontrado en la celda de la hoja de cálculo .

         después de copiar y guardar, debe cerrar la copia .

         entonces el código del sr. maurício es de gran ayuda para empezar a resolver el problema .

         es necesario copiar sólo una hoja de cálculo específica, y necesito copiar sólo los valores, sin las fórmulas .

         es necesario adaptar este código del sr. maurício , para copiar los valores de la hoja de cálculo específica, guardar en otro directorio y cerrar la copia .


abrazos amigos .
Última edición por physic el Sab Dic 15, 2018 5:34 am, editado 6 veces en total
LibreOffice 5.4.4.2 >>> Windows 7
physic
 
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro: guardar copia de hoja de cálculo específica

Notapor jsgaston » Vie Dic 07, 2018 8:00 pm

hola ... physic .... eso es que estas sick de phy?
mira ... yo estoy buscando hacer algo parecido... copiar una tabla de otra tabla .. e ir guardandola a continaución de otra
hasta que la tabla esté llena .... y quiero que las tablas se vayan guardando cada 1 segundo ¿tienes alguna idea de por donde tengo que empezar para hacer esta macro?
openoffice 4.1.3
win 10
jsgaston
 
Mensajes: 7
Registrado: Dom Feb 19, 2017 1:12 am

Re: macro: guardar copia de hoja de cálculo específica

Notapor arivas_2005 » Dom Dic 09, 2018 7:08 pm

Saludos...
usando de referencia el enlace sugerido, el gravador de macros (Version 4.4.7.2) y ---
https://forum.openoffice.org/es/forum/viewtopic.php?f=50&t=12145
https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=95710&sid=d579b10298cc6bb7105326e0fc82160f

propongo el código siguiente para que sea valorado como alternativa a la necesidad descrita antes.

Código: Seleccionar todo   Expandir vistaContraer vista
Sub copySelectedRangeFromSheetToNewDocDemo()
   If Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools") Then
       GlobalScope.BasicLibraries.loadLibrary("Tools")
   endif
   
   Hoja_origen=0
   
   dh       = CreateUnoService("com.sun.star.frame.DispatchHelper")
   frSrc    = ThisComponent.CurrentController.Frame
   sheetSrc = ThisComponent.Sheets(Hoja_origen)   '  aqui se controla la hoja origen
   rgSrc    = sheetSrc.GetCellRangeByName(ThisComponent.Sheets(Hoja_origen).Absolutename)
   ThisComponent.CurrentController.Select(rgSrc)
   dh.ExecuteDispatch(frSrc, ".uno:Copy", "", 0, Array())
   
   '  destino
   docTrg   = StarDesktop.LoadComponentFromUrl("private:factory/scalc", "_blank", 0, Array())
   frTrg    = docTrg.CurrentController.Frame
   sheetTrg = docTrg.Sheets(0)
   cellTrg  = sheetTrg.GetCellRangeByName("A1")
   frTrg.Activate()
   docTrg.CurrentController.Select(cellTrg)
   
   '' pegando datos, atributos y todo, con solo la siguente linea
'   dh.ExecuteDispatch(frTrg, ".uno:Paste", "", 0, Array())

   ''  pegando solo datos--------con el grupo de lineas siguintes-------------------
   dim argsp(5) as new com.sun.star.beans.PropertyValue
   argsp(0).Name = "Flags"
   argsp(0).Value = "SVD"
   argsp(1).Name = "FormulaCommand"
   argsp(1).Value = 0
   argsp(2).Name = "SkipEmptyCells"
   argsp(2).Value = false
   argsp(3).Name = "Transpose"
   argsp(3).Value = false
   argsp(4).Name = "AsLink"
   argsp(4).Value = false
   argsp(5).Name = "MoveMode"
   argsp(5).Value = 4
   dh.ExecuteDispatch(frTrg, ".uno:InsertContents", "", 0, argsp())
   '' - fin de pegando solo datos---------------------------------------------------
   
   nombre_hoja_origen=ThisComponent.Sheets(Hoja_origen).name
   docTrg.Sheets(Hoja_origen).name=nombre_hoja_origen
      
   nombre_para_libro=ThisComponent.Sheets(Hoja_origen).getCellRangeByName("A1").getstring()
      
   sRutaURL = ThisComponent.getURL()   
   sRutaCompletaplana = ConvertFromUrl( sRutaURL )   
   sNombre = FileNameOutOfPath( sRutaURL )   
   sRuta = DirectoryNameoutofPath(sRutaCompletaplana, GetPathSeparator())
   Otra_Ruta=sRuta & GetPathSeparator() & "TEMPO"  '  <-- nombre de la carpeta para las copias
    existe_otra_ruta=dir(convertToURL(Otra_Ruta),16)
    if len(existe_otra_ruta)=0 then   
       mkdir convertToURL(Otra_Ruta)
    endif
    wait 50
     if len(existe_otra_ruta)=0 then
      msgbox "No SE PUDO CREAR LA RUTA " & chr(10) & _
       Otra_Ruta  & chr(10) & _
       "Crearla y luego reintentar"
       docTrg.close(False)
       stop
    endif
   
    existe_copia_libro=dir(convertToURL(Otra_Ruta &  GetPathSeparator() & nombre_para_libro & ".ods"),0)
    if len(existe_copia_libro)>0 then
       Libro_Copia=Otra_Ruta &  GetPathSeparator() & nombre_para_libro & "_c.ods"
    else
        Libro_Copia=Otra_Ruta &  GetPathSeparator() & nombre_para_libro & ".ods"
    endif   
   dim propFich()   
   docTrg.storeAsURL(convertToURL(Libro_Copia), propFich())
   docTrg.close(true)
   
End Sub


Ojala no se me haya esdapado errorcillos y ayude a encontrar la solución a la necesidad existente.
exitos
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: macro: guardar copia de hoja de cálculo específica

Notapor physic » Lun Dic 10, 2018 11:54 am

sr. arivas_2005 ,

desde ya, quiero agradecer por su ayuda !

informo que la macro falló al copiar en la carpeta "TEMPO" en la siguiente línea del código: Otra_Ruta = sRuta & GetPathSeparator () & "TEMPO" .

es necesario que la dirección de la carpeta sea en el siguiente formato: C: \ Users \ Padrao \ Documents \ prueba A \ prueba B \ prueba C .

es posible poner en su código la dirección de la carpeta de destino así: C: \ Users \ Padrao \ Documents \ prueba A \ prueba B \ prueba C ... ??


abrazos amigo
LibreOffice 5.4.4.2 >>> Windows 7
physic
 
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro: guardar copia de hoja de cálculo específica

Notapor arivas_2005 » Mar Dic 11, 2018 1:17 am

Pruebe cambiando el valor de Otra_Ruta con el path que requiera como destino.
' ' ' Otra_Ruta=sRuta & GetPathSeparator() & "TEMPO" ' <-- nombre de la carpeta para las copias .. cambie así:
Código: Seleccionar todo   Expandir vistaContraer vista
Otra_Ruta="C:\Users\Padrao\Documents\Prueba A\Prueba B\Prueba C"

Pero... , debe asegurarse que dicha rama de directorios ya existe
---------------------------------------------------------------------------------------
y si lo considera necesario, elimine el grupo de lineas siguientes:
existe_otra_ruta=dir(convertToURL(Otra_Ruta),16)
if len(existe_otra_ruta)=0 then
mkdir convertToURL(Otra_Ruta)
endif
wait 50
if len(existe_otra_ruta)=0 then
msgbox "No SE PUDO CREAR LA RUTA " & chr(10) & _
Otra_Ruta & chr(10) & _
"Crearla y luego reintentar"
docTrg.close(False)
stop
endif

Creo que el libro .ods orígen puede estar en cualquier carpeta pero la copia se almacenará en "C:\Users\Padrao\Documents\Prueba A\Prueba B\Prueba C" y el puntero de celda debe apuntar a la celda "A1" de la hoja activa, donde debe estar el nombre para la copia a crear.
ojala trabaje la macro con el(los) cambio(s)
También, revise este hilo:
https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=96097&sid=f0a514efdfbaef84fadc68292f67a2d5
saludos.
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: macro: guardar copia de hoja de cálculo específica

Notapor physic » Mar Dic 11, 2018 11:20 am

sr. arivas_2005 ,

                 muy bueno su macro, ya funciona muy bien . :super:

                 me gustaría pedirle el favor para una necesidad más en la macro, es una necesidad más ideal para mi problema .

                 es posible cambiar la línea del código: (Hoja_origen = 0) por otra información, en lugar de indicar en la macro el índice de la hoja de cálculo (= 0), es mucho más accesible para mí indicar el nombre de la hoja de cálculo, algo así como: (Hoja_origen = hoja de cálculo 3) .

                 si puede hacer este cambio en la macro, será mucho más práctico para mí en la ejecución de la tarea .


abrazos amigo .
LibreOffice 5.4.4.2 >>> Windows 7
physic
 
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro: guardar copia de hoja de cálculo específica

Notapor arivas_2005 » Mié Dic 12, 2018 2:56 am

pruebe realizando los cambios siguientes

cambie Hoja_origen = 0
por Hoja_origen ="hoja de cálculo 3"

cambie
'sheetSrc = ThisComponent.Sheets(Hoja_origen) '

por
sheetSrc =ThisComponent.getSheets().getByName(Hoja_origen)


cambie
'rgSrc = sheetSrc.GetCellRangeByName(ThisComponent.Sheets(Hoja_origen).Absolutename)

por
rgSrc = sheetSrc.GetCellRangeByName(ThisComponent.getSheets().getByName(Hoja_origen).Absolutename)


elimine
'nombre_hoja_origen=ThisComponent.Sheets(Hoja_origen).name


cambie
' docTrg.Sheets(Hoja_origen).name=nombre_hoja_origen

por
docTrg.getSheets().getByIndex(0).name=Hoja_origen ' ' Esto porque el .ods destino solo tiene una hoja, la 0

ojalá funcione.
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: macro: guardar copia de hoja de cálculo específica

Notapor physic » Mié Dic 12, 2018 12:00 pm

sr. arivas_2005 ,

                                 está copiando correctamente la hoja de trabajo "REGISTRO" a la nueva carpeta, es decir, está colocando en el nuevo directorio correctamente .

                                pero ahora no está copiando ningún valor, está creando una copia de la hoja de cálculo vacía, sin los valores copiados .

                               se adjunta una imagen del código con los cambios que usted sugiere .

                                es que hice algo malo ??


abrazos amigo .
Adjuntos
código.png
LibreOffice 5.4.4.2 >>> Windows 7
physic
 
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro: guardar copia de hoja de cálculo específica

Notapor arivas_2005 » Jue Dic 13, 2018 3:22 am

Saludos.
El adjunto me trabaja. Hace la copia sin formatos.
Adjuntos
CreaCopiaDeHoja.ods
(13.19 KiB) 130 veces
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: macro: guardar copia de hoja de cálculo específica

Notapor physic » Jue Dic 13, 2018 6:03 pm

saludos arivas_2005 ,

su macro en el archivo adjunto no muestra ningún error para ejecutar el código .

la macro Guarde correctamente la copia de la hoja de cálculo deseada, con el nuevo nombre deseado, y también en el directorio de carpeta deseado .

Pero, para mí, continúa No mostrando los valores, es decir, crea un nuevo archivo vacío, sin valores ninguno . :(

parece que no puede copiar o pegar los valores , voy a seguir tratando de corregir el problema .


abrazos amigo .
LibreOffice 5.4.4.2 >>> Windows 7
physic
 
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro: guardar copia de hoja de cálculo específica

Notapor arivas_2005 » Vie Dic 14, 2018 1:01 am

saludos.
Y si adjunta el archivo del inconveniente o una muestra con el problema para validar el proceso?
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: macro: guardar copia de hoja de cálculo específica

Notapor physic » Vie Dic 14, 2018 1:10 pm

saludos arivas_2005 ,

                  sigue el archivo adjunto que estoy usando aquí para hacer mis pruebas, también está junto en el archivo de su macro y un botón en la hoja de cálculo .

detalles :

                 pero no está copiando los valores para mí, es decir, está creando un nuevo archivo totalmente vacío, no puede copiar los valores para mí, la hoja de cálculo copiada queda vacía .


abrazos amigo .
Adjuntos
Controle de Estoque.ods
(31.28 KiB) 126 veces
LibreOffice 5.4.4.2 >>> Windows 7
physic
 
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro: guardar copia de hoja de cálculo específica

Notapor arivas_2005 » Sab Dic 15, 2018 3:24 am

Saludos.
como primera impresión, voy a suponer que el botón estaría generando el inconveniente.
Eliminé el botón en el adjunto #2.
Ahora, Localice un ícono con forma de "cubo verde" en la barra de formato para ejecutar la macro, con un clic.
Hacer la prueba.
Adjuntos
Controle de Estoque2.ods
(38.85 KiB) 135 veces
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: macro: guardar copia de hoja de cálculo específica

Notapor physic » Sab Dic 15, 2018 5:30 am

[Resuelto]

  sr. arivas_2005 ,

                    Muchas gracias por la ayuda y la dedicación para resolver mi problema .

                    la macro ahora está funcionando perfectamente . :bravo: :bravo: :bravo:

                    felicitaciones por su conocimiento . :super:


abrazos amigo .
LibreOffice 5.4.4.2 >>> Windows 7
physic
 
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am


Volver a Macros y API UNO

¿Quién está conectado?

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