Archiv des LibreOffice- und OpenOffice.org-Wiki

[ÜberSicht] [TitelIndex] [WortIndex] [SeiteFinden

(./) SO6 OOo1.1

1. Spalten-Block markieren und löschen

2. Funktion des Makros

Es wird aus dem Text ein rechteckiger Block ausgeschnitten und ersatzlos entfernt. Evtl. nachfolgender Text rückt auf.

Es ist auch möglich Zeilen einzuschließen, die nicht die volle Zeilenlänge erreichen (s. Bsp.) Das Makro arbeitet zeichen- und zeilenweise. Bei propotionaler Schrift stehen die ausgeschnittenen Zeichen nicht direkt untereinander. Tabulatoren zählen jeweils als ein Zeichen und führen nicht zu Problemen, sofern sie in allen Zeilen vorkommen.

Der entfernte Text wird zur Kontrolle nochmals angezeigt. Er wird in einer Variable gespeichert und steht für weitere Verwendung zur Verfügung.

2.1. Gebrauchsanleitung

1. Mit der Maus wird alles vom linken oberen Eckpunkt bis zum unteren rechten Eckpunkt des Rechteckblockes ausgewählt.

<!> Dabei wird auch Text markiert, der nicht entfernt wird!

2. Starte dann das Makro.

Fertig.

2.2. Beispiele

Ausgangstext für alle Beispiele:

1234567890ABCDEFGHIJK
1234567890ABCDEFGHIJK
1234567
1234567890ABCDEFGHIJK
1234567890ABCDEFGHIJK

2 bis 4 markieren (von 1. Zeile "2" bis 5. Zeile "4"), Ergebnis:

1567890ABCDEFGHIJK
1567890ABCDEFGHIJK
1567
1567890ABCDEFGHIJK
1567890ABCDEFGHIJK

6 bis 9 markieren (von 1. Zeile "6" bis 5. Zeile "9"), Ergebnis:

123450ABCDEFGHIJK
123450ABCDEFGHIJK
12345
123450ABCDEFGHIJK
123450ABCDEFGHIJK

A bis G markieren (von 1. Zeile "A" bis 5. Zeile "G"), Ergebnis:

1234567890HIJK
1234567890HIJK
1234567
1234567890HIJK
1234567890HIJK

2.3. Offene Wünsche

Von Anwendern wurde der verständliche Wunsch geäussert, daß das Programm den Block nur markieren soll. Dann könnte der Anwender selbst die weitere Vorgehensweise bestimmen (löschen, kopieren, usw.) Leider kann ich dies (noch) nicht erreichen da ich nicht weiss wie man per Makro mehrere einzelne Textstellen markieren kann (entsprechend Maus mit STRG). Bitte Tips, wie dies per Makro möglich ist, dringend mitteilen :-)

3. Makro

Option Explicit
Sub BlockLoeschen
Dim oDoc as Object
Dim Auswahl as Object
Dim oVC as Object
Dim oTC as Object
Dim oTC1 as Object
Dim oTC2 as Object
Dim oX as Object
Dim VonSpalte as Integer
Dim BisSpalte as Integer
Dim VonZeile as Integer
Dim BisZeile as Integer
Dim SpaltenAnzahl as Integer
Dim ZeilenAnzahl as Integer
Dim I as Integer
Dim ZeilenLaenge as Integer
Dim Ausschnitt as String
        oDoc = thisComponent
        Auswahl = oDoc.getCurrentSelection()
        oVC = oDoc.CurrentController.getViewCursor()
    If Auswahl.getCount() <> 1 Then msgbox "genau 1 Bereich auswählen" : Stop
        oX = Auswahl.getByIndex( 0 )
        oTC1 = oDoc.Text.createTextCursorByRange( oX )
        oTC1.collapseToStart()
        oTC2 = oDoc.Text.createTextCursorByRange( oX )
        oTC2.collapseToEnd()
        oVC.gotoRange(oTC1,false)
        oVC.gotoStartOfLine(true)
        VonSpalte =len(oVC.string)

        VonZeile = 0
While oVC.goUp(1,false)
        VonZeile=VonZeile +1
Wend
        oVC.gotoRange(oTC2,false)
        oVC.gotoStartOfLine(true)
        BisSpalte =len(oVC.string)-1

        BisZeile = 0
While oVC.goUp(1,false)
        BisZeile=BisZeile +1
Wend
        SpaltenAnzahl = BisSpalte-VonSpalte +1
        ZeilenAnzahl = BisZeile-VonZeile

        oVC.gotoStart(false)
        oVC.goDown(VonZeile,false)
        oVC.goRight(VonSpalte,false)
For I = 0 to ZeilenAnzahl
        oTC = oDoc.Text.createTextCursorByRange(oVC)
        oVC.gotoStartOfLine(false)
        oVC.gotoEndOfLine(true)
        ZeilenLaenge= len(oVC.string)
        If ZeilenLaenge >= VonSpalte Then
                        oVC.gotoRange(oTC,false)
            If ZeilenLaenge >= VonSpalte + SpaltenAnzahl Then
                        oVC.goRight(SpaltenAnzahl,True)
                Else
                        oVC.goRight(ZeilenLaenge-VonSpalte,True)
                End If
                Ausschnitt = Ausschnitt + oVC.String + chr$(13)
                oVC.String = ""
        End If
        oVC.gotoRange(oTC1,false)
        oVC.goDown(i+1,false)
Next I
msgbox Ausschnitt
End Sub
REM Klaus Reiser 10.12.2004

(!) In OpenOffice.org ab Version 2.4 ist eine entsprechende Funktion bereits eingebaut: Wählen Sie in der StatusLeiste den SelektionsModus BLK (Blockauswahl).


KategorieMakro KategorieWriter


LizenzBedingungen | AnbieterKennzeichnung | DatenschutzErklärung | Stand: 2013-04-28