Macros/Writer/003/nl

    From The Document Foundation Wiki
    < Macros‎ | Writer
    This page is a translated version of the page Macros/Writer/003 and the translation is 100% complete.


    Other languages:

    Beschrijving

    Met deze macro worden de randen van een hele table of een enkele cel gemanipuleerd.

    Opmerking: het kan efficiënter zijn om randen te manipuleren met behulp van stijlen, zie https://ask.libreoffice.org/t/how-to-set-textframe-borders-at-once/108826

    De borders van een table zijn toegankelijk via de eigenschap com.sun.star.table.TableBorder[1].

    De elementen van deze struct hebben twee typen:

    • Borders (Randen) (boven, onder, links, rechts, horizontaal, verticaal); De randen zijn de structs com.sun.star.table.BorderLine2[2] die stijlelementen "toevoegen"[3] de struct com.sun.star.table.BorderLine[4].
    • Booleans (IsLeftLineValid, IsRightLineValid, IsTopLineValid, etc.). Bij het schrijven, ze definiëren als True om de regel dienovereenkomstig te wijzigen, en False om te negeren; wat betekent dat het zijn huidige waarde behoudt.

    De definitie voor de het gebruik van spaties met de inhoud via de eigenschap com.sun.star.table.TableBorderDistances[5]. Deze struct wordt gemanipuleerd via hetzelfde principe, met behulp van BottomDistance, LeftDistance, enz. en booleans voor het wijzigen van de naam.

    De onderstaande macro wordt uitgevoerd op de geselecteerde table. In de macro doen we het volgende:

    • We beginnen met het controleren of de cursor zich inderdaad in een table bevindt.
    • Het doel is om de huidige borders te vervangen (de parameters Is... zijn gedefinieerd als True) om een externe omtrek en horizontale dubbele lijnen te verkrijgen. We willen geen verticale lijnen. Daarom hebben we '.IsVerticalLineValid = true en VerticalLine = LibONoLine nodig, een struct die is gedefinieerd voor het toepassen van "empty" op een regel. We kunnen niet zomaar IsVerticalLineValid = false gebruiken omdat de huidige table verticale lijnen kan hebben gedefinieerd en we deze willen onderdrukken. Met de parameter false zouden de bestaande regels in hun huidige staat blijven.
    • De gewenste breedte van de border is 0,30 cm.
    • De parameter Fuse the adjacent line styles wordt gedefinieerd door de eigenschap CollapsingBorders van de table.

    Code

    Border lijnafstanden en -breedtes worden uitgedrukt in 1/100 mm.

    Option Explicit
    
    
    Sub Main()
        '''Kies welke van de twee subroutines u wilt aanroepen door de subroutine die u niet wilt op commentaar te zetten'''
    
        'AddBordersToAllCells
        _AddBordersToCell("Table1","B2")
    
    End Sub ' Main
    
    
    Sub AddBordersToAllCells()
        ''' Voeg dubbele borders toe aan alle cellen in de geselecteerde table'''
    
        Dim oCursor As Object
        Dim oTable As Object
        Dim oTableBorder As Object
    
        Dim oLine As New com.sun.star.table.BorderLine2
        Dim oNoLine As New com.sun.star.table.BorderLine2
        Dim oBorderDistances As New com.sun.star.table.TableBorderDistances
        oCursor = ThisComponent.CurrentController.ViewCursor
    
        If (isEmpty(oCursor.textTable)) Then
            MsgBox "De cursor staat niet in een table.", _
                MB_ICONINFORMATION, _
                "Waarschuwing van AddBordersToAllCells()"
        Else
            With oLine
                .Color = 0
                .InnerLineWidth = 10
                .LineDistance = 60 
                .LineStyle = com.sun.star.table.BorderLineStyle.DOUBLE 
                .LineWidth = 5
                .OuterLineWidth = 10
            End With
            With oNoLine
                .Color = 0
                .InnerLineWidth = 0
                .LineDistance = 0
                .LineStyle = 0
                .LineWidth = 0
                .OuterLineWidth = 0
            End With
            With oBorderDistances
                .BottomDistance = 300
                .IsBottomDistanceValid = True   
                .IsLeftDistanceValid = True   
                .IsRightDistanceValid = True   
                .IsTopDistanceValid = True   
                .LeftDistance = 300   
                .RightDistance = 300
                .TopDistance = 300
            End With
            
            oTable = oCursor.TextTable
            oTableBorder = oTable.TableBorder
            
            With oTableBorder        
                .IsLeftLineValid = true
                .IsRightLineValid = true
                .IsTopLineValid = true
                .IsBottomLineValid = true
                .IsHorizontalLineValid = true
                .IsVerticalLineValid = true
                .LeftLine = oLine
                .RightLine = oLine
                .TopLine = oLine
                .BottomLine = oLine 
                .HorizontalLine = oLine
                .VerticalLine = oNoLine
            End With
            
            With oTable
                .TableBorder = oTableBorder 
                .HoriOrient = com.sun.star.text.HoriOrientation.FULL 
                .CollapsingBorders = true
                .TableBorderDistances = oBorderDistances
            End With  
    
        End If
    
    End Sub ' AddBordersToAllCells
    
    
    Private Sub _AddBordersToCell(myTable As String, myCell As String)
        '''Dubbele borders toevoegen aan de gespecificeerde cel in de gespecificeerde table'''
    
        Dim oTable As Object
        Dim oCell As Object
        Dim oLine As New com.sun.star.table.BorderLine2
    
        With oLine
            .Color = 0
            .InnerLineWidth = 10
            .LineDistance = 60 
            .LineStyle = com.sun.star.table.BorderLineStyle.DOUBLE
            .LineWidth = 2
            .OuterLineWidth = 10
        End With
    
        oTable = ThisComponent.TextTables.getByName(myTable)
        oCell = oTable.getCellByName(myCell)
    
        With oCell
            .LeftBorder = oLine
            .LeftBorderDistance = 100
            .RightBorder = oLine
            .RightBorderDistance = 100
            .TopBorder = oLine
            .TopBorderDistance = 100
            .BottomBorder = oLine 
            .BottomBorderDistance = 100
        End With
    
    End Sub ' AddBordersToCell
    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    from com.sun.star.table import BorderLine2
    from com.sun.star.table import TableBorderDistances
    from com.sun.star.table.BorderLineStyle import DOUBLE
    import uno
    import msgbox
    from com.sun.star.text.HoriOrientation import FULL
    
    def _msgbox(prompt='', title='LibreOffice'):
        """ Toont een dialoogbox met een boodschap en geeft een waarde terug."""
        mb = msgbox.MsgBox(uno.getComponentContext())
        mb.addButton('OK')
        mb.show(prompt, 0, title)
    
    
    def AddBordersToAllCells():
        """Voegt dubbele borders toe aan alle cellen in de geselecteerde table"""
        desktop = XSCRIPTCONTEXT.getDesktop()
        model = desktop.getCurrentComponent()
        view_cursor = model.getCurrentController()
        cursor = view_cursor.getViewCursor()
        line = BorderLine2()
        no_line = BorderLine2()
        border_distances = TableBorderDistances()
        if cursor.TextTable is None:
            _msgbox("De cursor staat niet in een table.", "Waarschuwing van AddBordersToAllCells()")
        else:
            line.Color = 0
            line.InnerLineWidth = 10
            line.LineDistance = 60
            line.LineStyle = DOUBLE
            line.LineWidth = 5
            line.OuterLineWidth = 10
    
            no_line.Color = 0
            no_line.InnerLineWidth = 0
            no_line.LineDistance = 0
            no_line.LineStyle = 0
            no_line.LineWidth = 0
            no_line.OuterLineWidth = 0
    
            border_distances.BottomDistance = 300
            border_distances.IsBottomDistanceValid = True
            border_distances.IsLeftDistanceValid = True
            border_distances.IsRightDistanceValid = True
            border_distances.IsTopDistanceValid = True
            border_distances.LeftDistance = 300
            border_distances.RightDistance = 300
            border_distances.TopDistance = 300
    
            table = cursor.TextTable
            table_border = table.TableBorder
            table_border.IsLeftLineValid = True
            table_border.IsRightLineValid = True
            table_border.IsTopLineValid = True
            table_border.IsBottomLineValid = True
            table_border.IsHorizontalLineValid = True
            table_border.IsVerticalLineValid = True
            table_border.LeftLine = line
            table_border.RightLine = line
            table_border.TopLine = line
            table_border.BottomLine = line
            table_border.HorizontalLine = line
            table_border.VerticalLine = no_line
    
            table.TableBorder = table_border
            table.CollapsingBorders = True
            table.TableBorderDistances = border_distances
    
    
    def Main():
        _AddBordersToCell("Table1", "B2")
    
    
    def _AddBordersToCell(my_table, my_cell):
        """Voegt dubbele borders toe aan een gespecificeerde cel in een gespecificeerde table"""
        desktop = XSCRIPTCONTEXT.getDesktop()
        model = desktop.getCurrentComponent()
    
        line = BorderLine2()
        line.Color = 0
        line.InnerLineWidth = 10
        line.LineDistance = 60
        line.LineStyle = DOUBLE
        line.LineWidth = 2
        line.OuterLineWidth = 10
    
        table = model.TextTables.getByName(my_table)
        cell = table.getCellByName(my_cell)
    
        cell.LeftBorder = line
        cell.LeftBorderDistance = 100
        cell.RightBorder = line
        cell.RightBorderDistance = 100
        cell.TopBorder = line
        cell.TopBorderDistance = 100
        cell.BottomBorder = line
        cell.BottomBorderDistance = 100
    
    
    g_exportedScripts = (AddBordersToAllCells, Main)

    Writer-bestand om macro te testen

    Notities