Ayuda de LibreOffice 24.8
Es posible utilizar los lenguajes de programación BASIC y Python para escribir macros que apliquen formatos a intervalos de celdas en Calc.
El siguiente fragmento de código crea una Sub llamada FormatCellBorder que aplica formatos a los bordes de un intervalo en la hoja de Calc en uso.
    Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
        ' Crea la estructura UNO que almacenará el formato de línea nuevo
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = newStyle
        lineFormat.LineWidth = newWidth
        If Not IsMissing(newColor) Then lineFormat.Color = newColor
        ' Obtiene la celda de destino
        Dim oCell as Object
        Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
        ' Aplica el formato nuevo a todos los bordes
        oCell.TopBorder = lineFormat
        oCell.RightBorder = lineFormat
        oCell.LeftBorder = lineFormat
        oCell.BottomBorder = lineFormat
    End Sub
  La Sub descrita anteriormente utiliza cuatro argumentos:
cellAddress es una cadena que indica el intervalo que se formateará en el formato «A1».
newStyle es un valor entero que corresponde al estilo de la línea del borde (véase Estilos de línea más abajo).
newWidth es un valor entero que define el grosor de la línea.
newColor es un valor entero que corresponde a un color que se define con la función RGB.
Para llamar a FormatCellBorder, cree una macro nueva y pase los argumentos deseados como se muestra a continuación:
    Sub MyMacro
        ' Da acceso a las constantes de estilo de línea
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Da formato a «B5» de bordes azules sólidos
        FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
        ' Formatea todos los bordes en el intervalo «D2:F6» con líneas punteadas rojas
        FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
    End Sub
  Es posible implementar la misma funcionalidad en Python:
    from uno import createUnoStruct
    from scriptforge import CreateScriptService
    
    def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
        # Define el formato de línea nuevo
        line_format = createUnoStruct("com.sun.star.table.BorderLine2")
        line_format.LineStyle = newStyle
        line_format.LineWidth = newWidth
        line_format.Color = newColor
        # Servicio de ScriptForge para acceder a los intervalos de celdas
        doc = CreateScriptService("Calc")
        cell = doc.XCellRange(cellAddress)
        cell.TopBorder = line_format
        cell.RightBorder = line_format
        cell.LeftBorder = line_format
        cell.BottomBorder = line_format
  El fragmento de código siguiente implementa una macro llamada myMacro que llama a formatCellBorder:
    from com.sun.star.table import BorderLineStyle as cStyle
    
    def myMacro():
        bas = CreateScriptService("Basic")
        formatCellBorder("B5", cStyle.SOLID, 20, bas.RGB(0, 0, 255))
        formatCellBorder("D2:F6", cStyle.DOTTED, 20, bas.RGB(255, 0, 0))
  El código Python presentado anteriormente utiliza la biblioteca ScriptForge que está disponible desde LibreOffice 7.2.
Los estilos de línea se definen como constantes de enteros. La tabla siguiente enumera las constantes de los estilos de línea disponibles en :
| Nombre de constante | Valor de entero | Nombre de estilo de línea | 
|---|---|---|
| SOLID | 0 | Sólido | 
| DOTTED | 1 | Punteado | 
| DASHED | 2 | Discontinuo | 
| FINE_DASHED | 14 | Fina, discontinua | 
| DOUBLE_THIN | 15 | Doble, delgada | 
| DASH_DOT | 16 | Trazo-punto | 
| DASH_DOT_DOT | 17 | Trazo-punto-punto | 
Consulte Referencia de la constante BorderLineStyle en la documentación de la API de LibreOffice para más detalles de las constantes de estilos de línea.
Los objetos del intervalo poseen una propiedad denominada TableBorder2 que puede utilizarse para dar formato a los bordes del intervalo tal como se hace en el cuadro de diálogo , sección Disposición de líneas.
Además de los bordes superior, inferior, izquierdo y derecho, TableBorder2 también define los bordes vertical y horizontal. La siguiente macro afecta solo a los bordes superior e inferior del intervalo «B2:E5».
    Sub TableBorder2Example
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Define el formato de línea nuevo
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = cStyle.SOLID
        lineFormat.LineWidth = 15
        lineFormat.Color = RGB(0, 0, 0)
        ' Estructura que almacena la definición de TableBorder2 nueva
        Dim tableFormat as New com.sun.star.table.TableBorder2
        tableFormat.TopLine = lineFormat
        tableFormat.BottomLine = lineFormat
        tableFormat.IsTopLineValid = True
        tableFormat.IsBottomLineValid = True
        ' Aplica el formato de tabla al intervalo «B2:E5»
        Dim oCell as Object
        oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
        oCell.TableBorder2 = tableFormat
    End Sub
  La macro se puede implementar en Python de la manera siguiente:
    from com.sun.star.table import BorderLineStyle as cStyle
    from scriptforge import CreateScriptService
    
    def tableBorder2Example():
        bas = CreateScriptService("Basic")
        line_format = createUnoStruct("com.sun.star.table.BorderLine2")
        line_format.LineStyle = cStyle.SOLID
        line_format.LineWidth = 18
        line_format.Color = bas.RGB(0, 0, 0)
        table_format = createUnoStruct("com.sun.star.table.TableBorder2")
        table_format.TopLine = line_format
        table_format.BottomLine = line_format
        table_format.IsTopLineValid = True
        table_format.IsBottomLineValid = True
        doc = CreateScriptService("Calc")
        cell = doc.XCellRange("B2:E5")
        cell.TableBorder2 = table_format
  Consulte la referencia a la estructura TableBorder2 en la documentación de la API de LibreOffice para más información.