Calc. Crear hojas (b).
Sub InsertarUnaHoja
Dim oHojas As Object
oHojas = ThisComponent.getSheets()
oHojas.insertNewByName("Hoja2", 1)
End Sub
El problema de este modo de crear una nueva hoja es que es un procedimiento único, debido a que no pueden existir más de una hoja con el mismo nombre. El parámetro posición no supone esa limitación, pero modifica la posición de las hojas creadas si se sitúa por delante de ellas.
Para crear un número de hojas sin incurrir en la limitación anterior, deberemos manejar el parámetro Nombre como un string resultante de una concatenación de cadenas, siendo la segunda de ellas un valor numérico incremental convertido a string mediante la función CStr(). Por ejemplo:
Sub InsertarVariasHojas
Dim oHojas As Object
Dim i As Integer
oHojas = ThisComponent.getSheets()
For i = 0 To 3
oHojas.insertNewByName("Hoja" & CStr(i),i)
Next
End Sub
Creamos tantas hojas como deseemos mediante un bucle For, utilizando la variable Integer i como índice que aplicamos tanto en el parámetro Nombre ("Hoja" & CStr(i)), como al parámetro Posicion. De este modo no se repite el mismo nombre de la hoja, evitando así el error de sistema.
Finalmente podemos insertar una hoja al final del conjunto existente de forma automática, esto es: dando por supuesto que desconocemos el número de hojas que contiene el libro Calc.
Sub InsertarHojaFinal
Dim oHojas As Object
Dim oHoja As Object
Dim sNombre As String
sNombre = Trim(InputBox("Nombre de la nueva hoja"))
If sNombre <> "" Then
oHojas = ThisComponent.getSheets()
If Not oHojas.hasByName(sNombre) Then
oHojas.insertNewByName( sNombre, oHojas.getCount() )
End If
oHoja = ThisComponent.getSheets.getByName(sNombre)
ThisComponent.getCurrentController.setActiveSheet(oHoja)
End If
End Sub
En este caso pedimos al usuario el nombre la hoja mediante InputBox (sNombre = Trim(InputBox("Nombre de la nueva hoja"))) y comprobamos que el usuario introduzca un nombre mediante un condicional If (If sNombre <> "" Then). También comprobamos mediante condicional que el nombre de la hoja no se repite (If Not oHojas.hasByName(sNombre) Then). El posicionamiento (al final) se consigue mediante el método getCount() que devuelve el número de hojas del libro. Finalmente nos posicionamos en ella (oHoja = ThisComponent.getSheets.getByName(sNombre)) y la convertimos en la hoja activa (ThisComponent.getCurrentController.setActiveSheet(oHoja))
NOTAS
(1) Mauricio Baeza Servin (2007). Aprendiendo LibreOffice Basic. Documento modificado en septiembre de 2014.
(2) Este procedimiento [ya se explicó aquí], pero conviene insistir en él para la mejor comprensión de lo que sigue.