Περιεχόμενα

# Μορφοποίηση περιγραμμάτων σε Calc με μακροεντολές

Με τη χρήση γλωσσών προγραμματισμού Basic ή Python είναι δυνατό να γραφτούν μακροεντολές που εφαρμόζουν μορφές σε περιοχές κελιών στο Calc.

## Μορφοποίηση περιγραμμάτων σε περιοχές κελιών

Το παρακάτω απόσπασμα κώδικα δημιουργεί ένα Sub που ονομάζεται FormatCellBorder που εφαρμόζει νέες μορφές περιγράμματος σε μια δεδομένη διεύθυνση εύρους στο τρέχον φύλλο Calc.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Δημιουργεί τη δομή UNO που θα αποθηκεύσει τη νέα μορφή γραμμής
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            ' Παίρνει το κελί-στόχο
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Εφαρμόζει τη νέα μορφή σε όλα τα περιγράμματα
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Το Sub που περιγράφεται παραπάνω περιλαμβάνει τέσσερα ορίσματα:

- Η CellAddress είναι μια συμβολοσειρά που υποδηλώνει το εύρος που θα μορφοποιηθεί στη μορφή "A1".

- Το newStyle είναι μια ακέραια τιμή που αντιστοιχεί στην τεχνοτροπία γραμμής περιγράμματος (δείτε Τεχνοτροπίες γραμμής παρακάτω).

- Το newWidth είναι μια ακέραια τιμή που καθορίζει το πάχος της γραμμής.

- Το newColor (νέο_χρώμα) είναι μια ακέραια τιμή που αντιστοιχεί σε ένα χρώμα που ορίζεται χρησιμοποιώντας τη συνάρτηση RGB.

Για να καλέσετε το FormatCellBorder δημιουργήστε μια νέα μακροεντολή και περάστε τα επιθυμητά ορίσματα, όπως φαίνεται παρακάτω:

        Sub MyMacro
            ' Παρέχει πρόσβαση στις σταθερές τεχνοτροπίες γραμμής
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Μορφοποιεί "B5" με συμπαγή γαλάζια περιγράμματα
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Μορφοποιεί όλα τα περιγράμματα στην περιοχή "D2:F6" με κόκκινα περιγράμματα με κουκκίδες
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Είναι δυνατή η υλοποίηση της ίδιας λειτουργικότητας στην Python:

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Καθορίζει τη νέα μορφή γραμμής
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Υπηρεσία Scriptforge για πρόσβαση σε περιοχές κελιών
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

Το παρακάτω απόσπασμα κώδικα υλοποιεί μια μακροεντολή με το όνομα myMacro που καλεί 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))

Ο κώδικας Python που παρουσιάζεται παραπάνω χρησιμοποιεί τη βιβλιοθήκη ScriptForge που είναι διαθέσιμη από το LibreOffice 7.2.

## Τεχνοτροπία γραμμής

Οι τεχνοτροπίες γραμμής ορίζονται ως ακέραιες σταθερές. Ο παρακάτω πίνακας παραθέτει τις σταθερές για τις τεχνοτροπίες γραμμής που είναι διαθέσιμα στο Μορφή - Κελιά - Περιγράμματα:

Όνομα σταθεράς | Ακέραιη τιμή | Όνομα τεχνοτροπίας γραμμής
--- | --- | ---
SOLID | 0 | Συμπαγής
DOTTED | 1 | Με κουκκίδες
DASHED | 2 | Με παύλες
FINE_DASHED | 14 | Με λεπτές παύλες
DOUBLE_THIN | 15 | Διπλή λεπτή
DASH_DOT | 16 | Παύλα κουκκίδα
DASH_DOT_DOT | 17 | Παύλα κουκκίδα κουκκίδα

Ανατρέξτε στο Αναφορά σταθεράς BorderLineStyle στην τεκμηρίωση του API του LibreOffice για να μάθετε περισσότερα σχετικά με τις σταθερές τεχνοτροπίας γραμμής.

## Μορφοποίηση περιγραμμάτων με χρήση του TableBorder2

Τα αντικείμενα περιοχής έχουν μια ιδιότητα με το όνομα TableBorder2 που μπορεί να χρησιμοποιηθεί για τη μορφοποίηση περιγραμμάτων περιοχής όπως γίνεται στο παράθυρο διαλόγου Μορφή - Κελιά - Περιγράμματα στην ενότητα Διάταξη γραμμής.

Εκτός από τα πάνω, κάτω, αριστερά και δεξιά περιγράμματα, το TableBorder2 ορίζει επίσης κάθετα και οριζόντια περιγράμματα. Η παρακάτω μακροεντολή εφαρμόζει μόνο τα άνω και κάτω περιγράμματα στην περιοχή "B2:E5".

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Καθορίζει τη νέα μορφή γραμμής
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Δομή που αποθηκεύει τον νέο ορισμό TableBorder2
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Εφαρμόζει τη μορφή πίνακα στην περιοχή "B2:E5"
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

Η μακροεντολή μπορεί να εφαρμοστεί στην Python ως εξής:

        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

Ανατρέξτε στην Αναφορά δομής TableBorder2 στην τεκμηρίωση API του LibreOffice για να μάθετε περισσότερα για τα χαρακτηριστικά του.

Σχετικά θέματα

Η βιβλιοθήκη ScriptForge