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
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
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
Usuarios navegando por este Foro: Google [Bot] y 0 invitados