🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Writer: Tabellenzeile löschen

Alles zur Programmierung im LibreOffice.
supric
Beiträge: 7
Registriert: Sa 16. Mär 2013, 19:51

Writer: Tabellenzeile löschen

Beitrag von supric » Sa 16. Mär 2013, 20:06

Hallo,

ich möchte in einem Makro die Tabellenzeile löschen, in der der Cursor steht. Weiß jemand, wie ich diese Zeile identifizieren und lösche?

Danke!

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Writer: Tabellenzeile löschen

Beitrag von F3K Total » So 17. Mär 2013, 00:11

Hallo supric,
versuche es mal hiermit:

Code: Alles auswählen

Sub S_delete_current_row
    oselection = ThisComponent.currentselection
    osheet = oselection.spreadsheet
    nrow = oselection.rangeaddress.startrow
    if oselection.rows.count = 1 then
        osheet.rows.removebyindex(nrow,1)
    else
        if msgbox ("Um eine Zeile zu löschen, muss der Cursor in einer Zelle oder im Zeilenkopf stehen!"+chr(13)+_
                    "Soll die oberste Zeile der aktuellen Auswahl gelöscht werden?",276,"Fehler") = 6 then
            osheet.rows.removebyindex(nrow,1)
        endif
    endif
End Sub
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

supric
Beiträge: 7
Registriert: Sa 16. Mär 2013, 19:51

Re: Writer: Tabellenzeile löschen

Beitrag von supric » Mo 18. Mär 2013, 18:51

Hallo,

kann es sein, dass das Makro nur in calc funktioniert? Ich bekomme einen BASIC-Laufzeitfehler: Eigenschaft oder Methode nicht gefunden: spreadsheet. Ich möchte das ganze auf eine Tabelle in writer anwenden.

Danke!

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Writer: Tabellenzeile löschen

Beitrag von F3K Total » Mo 18. Mär 2013, 20:36

Moin,
supric hat geschrieben:Hallo,
kann es sein, dass das Makro nur in calc funktioniert?
Aber ja, da hast Du völlig Recht, das Writer: habe ich übersehen, nimm also dies:

Code: Alles auswählen

Sub S_remove_current_row
    osel = thiscomponent.currentselection(0)
    if osel.supportsservice("com.sun.star.text.TextTableCursor") then
         msgbox ("Um eine Zeile zu löschen, muss der Cursor in einer Zelle stehen!",16,"Fehler")
    else
        if not IsEmpty(osel.Cell) then
            scell = osel.cell.cellname
            otexttable = osel.texttable
            ncolumns =  otexttable.columns.count
            nrows = otexttable.rows.count
            for i = 0 to ncolumns - 1
                for k = 0 to nrows - 1
                    ocell = otexttable.getCellByPosition(i,k)
                    if ocell.cellname = scell then 
                        nrow = k
                        exit for
                    endif
                next k
            next i
            otexttable.rows.removebyindex(nrow,1)
        endif
    endif
End Sub
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

supric
Beiträge: 7
Registriert: Sa 16. Mär 2013, 19:51

Re: Writer: Tabellenzeile löschen

Beitrag von supric » Di 19. Mär 2013, 19:36

Hallo ,

perfekt! Vielen Dank für die wirklich schnelle Lösung.

Als nicht ganz unerfahrener Entwickler in Java tue mich als Anfänger mit der Makro-Programmierung schwer und interessiere mich natürlich sehr für den Lösungsweg. Vor allem kann ich überhaupt noch nicht mit der API umgehen und mir fehlt dafür der Einstiegspunkt. Vielleicht kannst du mir noch ein paar Fragen beantworten oder mir ein paar Tipps geben, wie ich mir eine solche Lösung auch hätte selbst erarbeiten können, beziehungsweise welche Lektüre oder welches Tutorial dabei gut helfen kann.

Ich habe soviel verstanden, dass das Löschen der Zeile über texttable.rows.removebyindex vorgenommen wird. Wenn ich diese Funktion kenne, weiß ich, dass ich den Index der Zeile benötige und mir ein Verfahren zur Identifizierung des Indexes erarbeiten. Nur wie finde ich diese Funktion removebyindex oder in der Folge getCellByPosition? Warum kann mir die texttable nicht direkt sagen, in welcher Zeile sich der Cursor befindet?

Was ich noch nicht verstanden habe ist der Abbruch nur der inneren Schleife und das Weiterlaufen der äußeren Schleife. Warum kann ich nicht sofort bei Identifizierung der Zeile die Funktion removebyindex aufrufen und beide Schleifen nacheinander abbrechen?

Danke für die Hilfe!

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Writer: Tabellenzeile löschen

Beitrag von F3K Total » Di 19. Mär 2013, 19:47

Hi,
klar gebe ich dir einen Tipp:
Ich empfehle Dir die Verwendung eines Inspection-Tools wie MRI oder Xray
Damit kannst Du alle OOo-Dokumente hinsichtlich ihres Aufbaues durchleuchten.
Und wenn Du dann noch das aktuelle SDK (unten rechts) installierst und in Xray oder MRI einrichtest, kannst Du direkt zum selektierten Objekt in die API Doku springen.
Hier habe ich mal versucht, dass zu erklären.
UND hier noch ETWAS Lektüre
Viel Erfolg Gruß R

Edit: Klar kann man auch die äussere Schleife verlassen, mein Fehler.
Zuletzt geändert von F3K Total am Di 19. Mär 2013, 20:11, insgesamt 1-mal geändert.
Windows 11: AOO, LO Linux Mint: AOO, LO

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Writer: Tabellenzeile löschen

Beitrag von F3K Total » Di 19. Mär 2013, 20:07

supric hat geschrieben:Warum kann mir die texttable nicht direkt sagen, in welcher Zeile sich der Cursor befindet?
Tja, danach habe ich auch gesucht, in Calc kein Problem, da hat jede Zelle eine

Code: Alles auswählen

.celladdress
Die fehlt hier leider, daher habe ich an dem Umweg länger basteln müssen.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

supric
Beiträge: 7
Registriert: Sa 16. Mär 2013, 19:51

Re: Writer: Tabellenzeile löschen

Beitrag von supric » Di 19. Mär 2013, 20:18

F3K Total hat geschrieben:Ich empfehle Dir die Verwendung eines Inspection-Tools wie MRI oder Xray
Damit kannst Du alle OOo-Dokumente hinsichtlich ihres Aufbaues durchleuchten.
Und wenn Du dann noch das aktuelle SDK (unten rechts) installierst und in Xray oder MRI einrichtest, kannst Du direkt zum selektierten Objekt in die API Doku springen.
Hier habe ich mal versucht, dass zu erklären.
Da bin ich wirklich gespannt.
F3K Total hat geschrieben:Edit: Klar kann man auch die äussere Schleife verlassen, mein Fehler.
Genau das hatte ich natürlich gleich probiert und bekomme diesen Fehler:
Bild
bei

Code: Alles auswählen

for i = 0 to ncolumns - 1
                for k = 0 to nrows - 1
                    ocell = otexttable.getCellByPosition(i,k)
                    if ocell.cellname = scell then
                        nrow = k
                        exit for
                    endif
                next k
               exit for
            next i
            otexttable.rows.removebyindex(nrow,1)
Wenn ich die Zeile versuche in der inneren Schleife gleich zu löschen, passiert einfach nichts:

Code: Alles auswählen

for i = 0 to ncolumns - 1
                for k = 0 to nrows - 1
                    ocell = otexttable.getCellByPosition(i,k)
                    if ocell.cellname = scell then
                        otexttable.rows.removebyindex(k,1)
                        exit for
                    endif
                next k
               exit for
            next i
            

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Writer: Tabellenzeile löschen

Beitrag von F3K Total » Di 19. Mär 2013, 20:26

Na, dann hüpf doch raus:

Code: Alles auswählen

Sub S_remove_current_row
    osel = thiscomponent.currentselection(0)
    if osel.supportsservice("com.sun.star.text.TextTableCursor") then
         msgbox ("Um eine Zeile zu löschen, muss der Cursor in einer Zelle stehen!",16,"Fehler")
    else
        if not IsEmpty(osel.Cell) then
            scell = osel.cell.cellname
            otexttable = osel.texttable
            ncolumns =  otexttable.columns.count
            nrows = otexttable.rows.count
            for i = 0 to ncolumns - 1
                for k = 0 to nrows - 1
                    ocell = otexttable.getCellByPosition(i,k)
                    if ocell.cellname = scell then
                        nrow = k
                        goto 100
                    endif
                next k
            next i
            100:
            otexttable.rows.removebyindex(nrow,1)
        endif
    endif
End Sub
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

supric
Beiträge: 7
Registriert: Sa 16. Mär 2013, 19:51

Re: Writer: Tabellenzeile löschen

Beitrag von supric » Di 19. Mär 2013, 20:52

F3K Total hat geschrieben:Na, dann hüpf doch raus:
Ja, nee. Es funktioniert ja mit deiner Lösung. Ich kann mir nur nicht erklären, warum die anderen beiden Varianten nicht funktionieren.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten