Μορφοποίηση περιγραμμάτων σε 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 που περιγράφεται παραπάνω περιλαμβάνει τέσσερα ορίσματα:

Για να καλέσετε το 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))
  
note

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


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

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

Όνομα σταθεράς

Ακέραιη τιμή

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

SOLID

0

Συμπαγής

DOTTED

1

Με κουκκίδες

DASHED

2

Με παύλες

FINE_DASHED

14

Με λεπτές παύλες

DOUBLE_THIN

15

Διπλή λεπτή

DASH_DOT

16

Παύλα κουκκίδα

DASH_DOT_DOT

17

Παύλα κουκκίδα κουκκίδα


tip

Ανατρέξτε στο Αναφορά σταθεράς 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
  
tip

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


Παρακαλούμε, υποστηρίξτε μας!