[RESUELTO] Macro abra una hoja con una plantilla y color
[RESUELTO] Macro abra una hoja con una plantilla y color
Hola. Tengo una macro, que conseguí gracias a este foro, que al escribir en cualquier celda de una columna me crea una hoja nueva con el nombre de esa celda. Ahora lo que quisiera es poder darle un color específico a esa hoja y si pudiese ser, que esa hoja se abriese con una plantilla que ya tengo hecha. Imagino que se debe poder hacer, pero no tengo ni idea de como hacerlo. Cualquier sugerencia será bienvenida, y como siempre muchas gracias por adelantado
Última edición por labotica el Mar Abr 17, 2018 6:16 pm, editado 1 vez en total.
OpenOffice 4.0 en Ubuntu 14.04
- PepeOooSevilla
- Mensajes: 1480
- Registrado: Sab Abr 04, 2009 6:10 pm
- Ubicación: Sevilla (España)
Re: Macro que abra una hoja con una plantilla y color de pes
Hola.
Adjunto una posible solución (versión 2).
A tener en cuenta:
Adjunto una posible solución (versión 2).
Código: Seleccionar todo
REM ***** BASIC *****
Option Explicit
Sub CrearHojaSegunColumna()
Dim DocCalc As Object
Dim Seleccion As Object
Dim NombreNuevaHoja As String
Dim HojasEnLibro As Object
Dim ArchivoPlantilla As String
Dim HojaCreada As Object
On Error Goto CONTROL_ERRORES
DocCalc = ThisComponent
Seleccion = DocCalc.getCurrentSelection()
With Seleccion
'Solo si es una sola celda
If .supportsService("com.sun.star.sheet.SheetCell") Then
'También If .getImplementationName() = "ScCellObj" Then
'Si no es la columna A sale del procedimiento
'En OOBasic las columnas y filas comienzan en 0 (cero)
If .getCellAddress.Column <> 0 Then Exit Sub
NombreNuevaHoja = .getString()
'Si la celda está vacía sale del procedimiento
If NombreNuevaHoja = "" Then Exit Sub
NombreNuevaHoja = "Ficha Técnica " & NombreNuevaHoja
HojasEnLibro = DocCalc.getSheets()
With HojasEnLibro
If Not .hasByName(NombreNuevaHoja) Then
'Si no existe la insertamos el final de acuerdo al modelo de hoja que se encuentra
'en el archivo cuya ruta es la siguiente:
'¡¡¡Cambiar la ruta!!!
ArchivoPlantilla = "K:\PEPE_16GB\FORO OOO\FORO CALC\FORO_CALC_EJEMPLO_PLANTILLA.ods"
.insertNewByName(NombreNuevaHoja, .getCount())
HojaCreada = .getByIndex(.getCount()-1)
With HojaCreada
'PLANTILLA_01: es el nombre de la hoja que va a servir de modelo. El archivo modelo puede
'tener varias hojas y podemos seleccionar la que nos interese
.link(ConvertToURL(ArchivoPlantilla), "PLANTILLA_01", "", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
'El color de la pestaña lo decide la macro aleatoriamente. Si quieres un color determinado
'tendrías que poner los números apropiados de 0 a 255 siendo:
'RGB(0, 0, 0) el color NEGRO; RGB(255, 255, 255) el color BLANCO;
'RGB(255, 0, 0) el color ROJO; RGB(0, 255, 0) el color VERDE;
'RGB(0, 0, 255) el color AZUL; etc, etc.
.TabColor = RGB(AleatorioEntre(0, 255), AleatorioEntre(0, 255), AleatorioEntre(0, 255))
End With
Else
MsgBox "Esta hoja ya existe", 16, "¡Atención!"
End If
End With
End If
End With
Exit Sub
CONTROL_ERRORES:
MsgBox "Se ha producido un error ...", 16, "¡Atención!"
End Sub
Function AleatorioEntre(nDesde As Long, nHasta As Long) As Long
' Devuelve un valor aleatorio entre nDesde y nHasta
' Ver http://blog.open-office.es/basic/macro-aleatorio-entre-para-openoffice-y-libreoffice-basic#more535
AleatorioEntre = Int((nHasta - nDesde + 1)*Rnd() + nDesde)
End Function
- - Debes modificar la ruta de la variable "ArchivoPlantilla" por la ruta correcta del archivo que va a servir como modelo o plantilla.
- - "PLANTILLA_01" es el nombre de la hoja que va a servir de modelo dentro del "ArchivoPlantilla". El archivo modelo/plantilla puede tener varias hojas y podemos seleccionar la que nos interese.
- - El color de la pestaña lo decide la macro aleatoriamente. Si quieres un color determinado tendrías que poner los números apropiados de 0 a 255 siendo:
- - RGB(0, 0, 0) el color NEGRO; RGB(255, 255, 255) el color BLANCO;
- RGB(255, 0, 0) el color ROJO; RGB(0, 255, 0) el color VERDE;
- RGB(0, 0, 255) el color AZUL; etc, etc..
- - RGB(0, 0, 0) el color NEGRO; RGB(255, 255, 255) el color BLANCO;
- Adjuntos
-
- FORO_CALC_Crear hojas a partir de una columna_v2.ods
- LibreOffice Calc
- (12.14 KiB) Descargado 162 veces
-
- FORO_CALC_EJEMPLO_PLANTILLA.ods
- LibreOffice Calc
- (9.85 KiB) Descargado 151 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Re: Macro que abra una hoja con una plantilla y color de pes
Veo más sencillo que tengas la hoja/plantilla en el mismo documento, de forma oculta, y solo se copia y listo...
______________________________________________
"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: Macro que abra una hoja con una plantilla y color de pes
Para los que usamos Python e EasyMacro:
https://gitlab.com/mauriciobaeza/easy-m ... s/index-es
Versión con una hoja como plantilla en el mismo documento:
https://gitlab.com/mauriciobaeza/easy-m ... s/index-es
Versión con una hoja como plantilla en el mismo documento:
Código: Seleccionar todo
from libo import LIBO
import random
def main():
app = LIBO()
doc = app.doc
sel = doc.selection
if not sel.is_cell or sel.column or not sel.value:
return
nuevo_nombre = 'Ficha Técnica {}'.format(sel.value)
if doc.sheets.exists(nuevo_nombre):
msg = 'La hoja ya existe'
app.msgbox(msg)
return
nueva_hoja = doc.sheets.copy('plantilla', nuevo_nombre)
nueva_hoja.obj.TabColor = random.randint(10000, 100000)
return
______________________________________________
"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: Macro que abra una hoja con una plantilla y color de pes
Hola, hola y hola!! Y gracias, gracias, gracias! Muchisimas gracias!!! Ya casi lo tengo, y sólo me queda una duda, que en caso de no poder solucionarla, tendría fácil solución. Con esta macro que me has mandado, la he adaptado a lo que realmente necesito que es:
Cada vez que escribo en una casilla de una columna, al darle intro, me abre dos hojas nuevas. Una con la Ficha Técnica y otra con un Escandallo, la primera de color verde y la segunda de color rojo. Tanto en la hoja de la ficha técnica como en la del escandallo, quiero que me abra una plantilla que tengo guardada en mis plantillas, y que uso siempre, para otros archivos también.
Ahora bien, he hecho algun cambio en lo que me has mandado, y funciona todo a la perfección menos una cosa. Como ves, en la macro tengo puesto que el archivo/plantilla del escandallo que me abre en la hoja del escandallo, es un archivo .ods, que está guardado en mi carpeta de Documentos, en cambio, la de la Ficha Técnica, es un archivo .ots, guardado en la carpeta de /Template de libreoffice.
Pues bien, sólo me funciona la primera (el archivo .ods). Imagino que debe ser porque en donde dice "HojasEnLibro = DocCalc.getSheets()" debo cambiarlo por algo conmo "HojasEnLibro = TemplateCalc.getSheets()" o algo así? Puede ser? No tengo mucha idea, pero como funciona todo perfectamente, menos este pequeño detalle, imaginno que debe ser algo que vaya por ahí.
Es imposible no repetirme: Muchísimas gracias por todo!
Cada vez que escribo en una casilla de una columna, al darle intro, me abre dos hojas nuevas. Una con la Ficha Técnica y otra con un Escandallo, la primera de color verde y la segunda de color rojo. Tanto en la hoja de la ficha técnica como en la del escandallo, quiero que me abra una plantilla que tengo guardada en mis plantillas, y que uso siempre, para otros archivos también.
Ahora bien, he hecho algun cambio en lo que me has mandado, y funciona todo a la perfección menos una cosa. Como ves, en la macro tengo puesto que el archivo/plantilla del escandallo que me abre en la hoja del escandallo, es un archivo .ods, que está guardado en mi carpeta de Documentos, en cambio, la de la Ficha Técnica, es un archivo .ots, guardado en la carpeta de /Template de libreoffice.
Código: Seleccionar todo
Sub CrearFichaTecnica()
Dim DocCalc As Object
Dim Seleccion As Object
Dim NombreNuevaHoja As String
Dim HojasEnLibro As Object
Dim ArchivoPlantilla As String
Dim HojaCreada As Object
On Error Goto CONTROL_ERRORES
DocCalc = ThisComponent
Seleccion = DocCalc.getCurrentSelection()
With Seleccion
'Solo si es una sola celda
If .supportsService("com.sun.star.sheet.SheetCell") Then
'También If .getImplementationName() = "ScCellObj" Then
'Si no es la columna A sale del procedimiento
'En OOBasic las columnas y filas comienzan en 0 (cero)
If .getCellAddress.Column <> 2 Then Exit Sub
NombreNuevaHoja = .getString()
'Si la celda está vacía sale del procedimiento
If NombreNuevaHoja = "" Then Exit Sub
NombreNuevaHoja = "FT " & NombreNuevaHoja
HojasEnLibro = DocCalc.getSheets()
With HojasEnLibro
If Not .hasByName(NombreNuevaHoja) Then
'Si no existe la insertamos al final
ArchivoPlantilla = "∕home∕xavi∕.config∕libreoffice∕4∕user∕template∕FichaTecnica2.ods"
.insertNewByName(NombreNuevaHoja, .getCount())
HojaCreada = .getByIndex(.getCount()-1)
With HojaCreada
'PLANTILLA_01: es el nombre de la hoja que va a servir de modelo. El archivo modelo puede
'tener varias hojas y podemos seleccionar la que nos interese
.link(ConvertToURL(ArchivoPlantilla), "FichaTecnica", "", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
'El color de la pestaña lo decide la macro aleatoriamente. Si quieres un color determinado
'tendrías que poner los números apropiados de 0 a 255 siendo:
'RGB(0, 0, 0) el color NEGRO; RGB(255, 255, 255) el color BLANCO;
'RGB(255, 0, 0) el color ROJO; RGB(0, 255, 0) el color VERDE;
'RGB(0, 0, 255) el color AZUL; etc, etc.
.TabColor = RGB(0, 255, 0)
End With
Else
MsgBox "Esta hoja ya existe", 16, "¡Atención!"
End If
End With
End If
If .supportsService("com.sun.star.sheet.SheetCell") Then
'También If .getImplementationName() = "ScCellObj" Then
'Si no es la columna A sale del procedimiento
'En OOBasic las columnas y filas comienzan en 0 (cero)
If .getCellAddress.Column <> 2 Then Exit Sub
NombreNuevaHoja = .getString()
'Si la celda está vacía sale del procedimiento
If NombreNuevaHoja = "" Then Exit Sub
NombreNuevaHoja = "Esc " & NombreNuevaHoja
HojasEnLibro = DocCalc.getSheets()
With HojasEnLibro
If Not .hasByName(NombreNuevaHoja) Then
'Si no existe la insertamos al final
ArchivoPlantilla = "/home/xavi/Documentos/Escandallo.ots"
.insertNewByName(NombreNuevaHoja, .getCount())
HojaCreada = .getByIndex(.getCount()-1)
With HojaCreada
'PLANTILLA_01: es el nombre de la hoja que va a servir de modelo. El archivo modelo puede
'tener varias hojas y podemos seleccionar la que nos interese
.link(ConvertToURL(ArchivoPlantilla), "Hoja1", "", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
'El color de la pestaña lo decide la macro aleatoriamente. Si quieres un color determinado
'tendrías que poner los números apropiados de 0 a 255 siendo:
'RGB(0, 0, 0) el color NEGRO; RGB(255, 255, 255) el color BLANCO;
'RGB(255, 0, 0) el color ROJO; RGB(0, 255, 0) el color VERDE;
'RGB(0, 0, 255) el color AZUL; etc, etc.
.TabColor = RGB(255, 0, 0)
End With
Else
MsgBox "Esta hoja ya existe", 16, "¡Atención!"
End If
End With
End If
End With
Exit Sub
CONTROL_ERRORES:
MsgBox "Se ha producido un error ...", 16, "¡Atención!"
End Sub
Es imposible no repetirme: Muchísimas gracias por todo!
OpenOffice 4.0 en Ubuntu 14.04
Re: Macro que abra una hoja con una plantilla y color de pes
Perdón, ya está, ni template ni nada. Era un fallo mío: como no me funcionaba he estado haciendo cambios, y como fallaba justo a partir de donde le decía la ruta del archivo he probado de cambiar la barra /home/... por la que tengo en el teclado numérico ∕home∕...
Loi he cambiado y funciona todo perfecto! Muchas gracias y ahora edito el tema
Loi he cambiado y funciona todo perfecto! Muchas gracias y ahora edito el tema
OpenOffice 4.0 en Ubuntu 14.04
Re: [RESUELTO]Macro que abra una hoja con una plantilla y co
Hola Mauricio, como ya he dicho, no tengo mucha idea, pero eso no quita que me pase las horas que haga falta! Ahora me miraré esto que me has mandado, porque parece la bomba. Sólo por la cantidad de código que se ahorra ya me parece increíble. Gracias y hasta pronto
OpenOffice 4.0 en Ubuntu 14.04
Re: [RESUELTO] Macro abra una hoja con una plantilla y color
Por acá puedes ver un video de como instalar EasyMacro:
https://forum.openoffice.org/es/forum/v ... 50&t=13062
para poder usar la macro que te muestro, en la misma te pase la documentación de la misma, y aquí estamos por cualquier duda con su uso.
Saludos
https://forum.openoffice.org/es/forum/v ... 50&t=13062
para poder usar la macro que te muestro, en la misma te pase la documentación de la misma, y aquí estamos por cualquier duda con su uso.
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