Página 1 de 1

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

NotaPublicado: Vie Dic 07, 2018 12:01 pm
por physic
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 .

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

NotaPublicado: Vie Dic 07, 2018 8:00 pm
por jsgaston
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?

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

NotaPublicado: Dom Dic 09, 2018 7:08 pm
por arivas_2005
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

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

NotaPublicado: Lun Dic 10, 2018 11:54 am
por physic
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

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

NotaPublicado: Mar Dic 11, 2018 1:17 am
por arivas_2005
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.

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

NotaPublicado: Mar Dic 11, 2018 11:20 am
por physic
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 .

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

NotaPublicado: Mié Dic 12, 2018 2:56 am
por arivas_2005
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.

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

NotaPublicado: Mié Dic 12, 2018 12:00 pm
por physic
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 .

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

NotaPublicado: Jue Dic 13, 2018 3:22 am
por arivas_2005
Saludos.
El adjunto me trabaja. Hace la copia sin formatos.

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

NotaPublicado: Jue Dic 13, 2018 6:03 pm
por physic
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 .

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

NotaPublicado: Vie Dic 14, 2018 1:01 am
por arivas_2005
saludos.
Y si adjunta el archivo del inconveniente o una muestra con el problema para validar el proceso?

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

NotaPublicado: Vie Dic 14, 2018 1:10 pm
por physic
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 .

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

NotaPublicado: Sab Dic 15, 2018 3:24 am
por arivas_2005
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.

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

NotaPublicado: Sab Dic 15, 2018 5:30 am
por physic
[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 .