[RESUELTO] guardar copia de hoja de cálculo específica
[RESUELTO] guardar copia de hoja de cálculo específica
saludos ,
he encontrado un código del sr. Maurício , que se adapta muy bien para resolver mi problema https://forum.openoffice.org/es/forum/v ... 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 .
he encontrado un código del sr. Maurício , que se adapta muy bien para resolver mi problema https://forum.openoffice.org/es/forum/v ... 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
Re: macro: guardar copia de hoja de cálculo específica
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?
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
win 10
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: macro: guardar copia de hoja de cálculo específica
Saludos...
usando de referencia el enlace sugerido, el gravador de macros (Version 4.4.7.2) y ---
https://forum.openoffice.org/es/forum/v ... 50&t=12145
https://forum.openoffice.org/en/forum/v ... e0fc82160f
propongo el código siguiente para que sea valorado como alternativa a la necesidad descrita antes.
Ojala no se me haya esdapado errorcillos y ayude a encontrar la solución a la necesidad existente.
exitos
usando de referencia el enlace sugerido, el gravador de macros (Version 4.4.7.2) y ---
https://forum.openoffice.org/es/forum/v ... 50&t=12145
https://forum.openoffice.org/en/forum/v ... e0fc82160f
propongo el código siguiente para que sea valorado como alternativa a la necesidad descrita antes.
Código: Seleccionar todo
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
exitos
Libreoffice 4.7
Puppy slacko 6 y windows 7
Puppy slacko 6 y windows 7
Re: macro: guardar copia de hoja de cálculo específica
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
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
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: macro: guardar copia de hoja de cálculo específica
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í:
Pero... , debe asegurarse que dicha rama de directorios ya existe
---------------------------------------------------------------------------------------
y si lo considera necesario, elimine el grupo de lineas siguientes:
ojala trabaje la macro con el(los) cambio(s)
También, revise este hilo:
https://forum.openoffice.org/en/forum/v ... 292f67a2d5
saludos.
' ' ' Otra_Ruta=
Código: Seleccionar todo
Otra_Ruta="C:\Users\Padrao\Documents\Prueba A\Prueba B\Prueba C"
---------------------------------------------------------------------------------------
y si lo considera necesario, elimine el grupo de lineas siguientes:
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.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
ojala trabaje la macro con el(los) cambio(s)
También, revise este hilo:
https://forum.openoffice.org/en/forum/v ... 292f67a2d5
saludos.
Libreoffice 4.7
Puppy slacko 6 y windows 7
Puppy slacko 6 y windows 7
Re: macro: guardar copia de hoja de cálculo específica
sr. arivas_2005 ,
muy bueno su macro, ya funciona muy bien .
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 .
muy bueno su macro, ya funciona muy bien .
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
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: macro: guardar copia de hoja de cálculo específica
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.
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
'
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
Puppy slacko 6 y windows 7
Re: macro: guardar copia de hoja de cálculo específica
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 .
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 .
LibreOffice 5.4.4.2 >>> Windows 7
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: macro: guardar copia de hoja de cálculo específica
Saludos.
El adjunto me trabaja. Hace la copia sin formatos.
El adjunto me trabaja. Hace la copia sin formatos.
- Adjuntos
-
- CreaCopiaDeHoja.ods
- (13.19 KiB) Descargado 374 veces
Libreoffice 4.7
Puppy slacko 6 y windows 7
Puppy slacko 6 y windows 7
Re: macro: guardar copia de hoja de cálculo específica
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 .
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
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: macro: guardar copia de hoja de cálculo específica
saludos.
Y si adjunta el archivo del inconveniente o una muestra con el problema para validar el proceso?
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
Puppy slacko 6 y windows 7
Re: macro: guardar copia de hoja de cálculo específica
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 .
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) Descargado 352 veces
LibreOffice 5.4.4.2 >>> Windows 7
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: macro: guardar copia de hoja de cálculo específica
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.
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) Descargado 396 veces
Libreoffice 4.7
Puppy slacko 6 y windows 7
Puppy slacko 6 y windows 7
Re: macro: guardar copia de hoja de cálculo específica
[Resuelto]
sr. arivas_2005 ,
Muchas gracias por la ayuda y la dedicación para resolver mi problema .
la macro ahora está funcionando perfectamente .
felicitaciones por su conocimiento .
abrazos amigo .
sr. arivas_2005 ,
Muchas gracias por la ayuda y la dedicación para resolver mi problema .
la macro ahora está funcionando perfectamente .
felicitaciones por su conocimiento .
abrazos amigo .
LibreOffice 5.4.4.2 >>> Windows 7