🙏 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!🍀
>> 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
Writer: Tabellenzeile löschen
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!
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!
Re: Writer: Tabellenzeile löschen
Hallo supric,
versuche es mal hiermit:
Gruß R
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
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Writer: Tabellenzeile löschen
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!
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!
Re: Writer: Tabellenzeile löschen
Moin,
Gruß R
Aber ja, da hast Du völlig Recht, das Writer: habe ich übersehen, nimm also dies:supric hat geschrieben:Hallo,
kann es sein, dass das Makro nur in calc funktioniert?
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
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Writer: Tabellenzeile löschen
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!
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!
Re: Writer: Tabellenzeile löschen
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.
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
Re: Writer: Tabellenzeile löschen
Tja, danach habe ich auch gesucht, in Calc kein Problem, da hat jede Zelle einesupric hat geschrieben:Warum kann mir die texttable nicht direkt sagen, in welcher Zeile sich der Cursor befindet?
Code: Alles auswählen
.celladdress
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Writer: Tabellenzeile löschen
Da bin ich wirklich gespannt.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.
Genau das hatte ich natürlich gleich probiert und bekomme diesen Fehler:F3K Total hat geschrieben:Edit: Klar kann man auch die äussere Schleife verlassen, mein Fehler.

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)
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
Re: Writer: Tabellenzeile löschen
Na, dann hüpf doch raus:
Gruß R
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
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Writer: Tabellenzeile löschen
Ja, nee. Es funktioniert ja mit deiner Lösung. Ich kann mir nur nicht erklären, warum die anderen beiden Varianten nicht funktionieren.F3K Total hat geschrieben:Na, dann hüpf doch raus:
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.