Seite 1 von 2
Writer: Tabellenzeile löschen
Verfasst: Sa 16. Mär 2013, 20:06
von supric
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!
Re: Writer: Tabellenzeile löschen
Verfasst: So 17. Mär 2013, 00:11
von F3K Total
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
Re: Writer: Tabellenzeile löschen
Verfasst: Mo 18. Mär 2013, 18:51
von supric
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!
Re: Writer: Tabellenzeile löschen
Verfasst: Mo 18. Mär 2013, 20:36
von F3K Total
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
Re: Writer: Tabellenzeile löschen
Verfasst: Di 19. Mär 2013, 19:36
von supric
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!
Re: Writer: Tabellenzeile löschen
Verfasst: Di 19. Mär 2013, 19:47
von F3K Total
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.
Re: Writer: Tabellenzeile löschen
Verfasst: Di 19. Mär 2013, 20:07
von F3K Total
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
Die fehlt hier leider, daher habe ich an dem Umweg länger basteln müssen.
Gruß R
Re: Writer: Tabellenzeile löschen
Verfasst: Di 19. Mär 2013, 20:18
von supric
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:

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
Re: Writer: Tabellenzeile löschen
Verfasst: Di 19. Mär 2013, 20:26
von F3K Total
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
Re: Writer: Tabellenzeile löschen
Verfasst: Di 19. Mär 2013, 20:52
von supric
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.