Navigieren in Tabellen, verschieben von Tabellenzeilen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

elch
*
Beiträge: 12
Registriert: Sa, 12.03.2011 21:19

Navigieren in Tabellen, verschieben von Tabellenzeilen

Beitrag von elch »

Hallo,

ich möchte mir gerne ein Makro in OOo Basic bauen, mit dem ich in Writer (also in Textdokumenten) Tabellenzeilen innerhalb der Tabelle per Shortcut verschieben kann, so wie es auch mit Absätzen möglich ist.

Dazu noch die Fragen:

1. Wie kann ich in der Tabelle zwischen den Tabellenzeilen navigieren, unabhängig vom Inhalt der einzelnen Zellen?

zB.

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args1()) 
wäre ja abhängig vom Inhalt der Zellen.

2. Wie kann ich feststellen wieviele Tabellenzeilen ausgeschnitten wurden bzw. sich nun in der Zwischenablage befinden?

Oder gibt es sogar eine Möglichkeit, die ohne Copy & Paste auskommt?

Besten Dank + Gruß Frank
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Navigieren in Tabellen, verschieben von Tabellenzeilen

Beitrag von Axel Richter »

Hallo Frank,
elch hat geschrieben:ich möchte mir gerne ein Makro in OOo Basic bauen, mit dem ich in Writer (also in Textdokumenten) Tabellenzeilen innerhalb der Tabelle per Shortcut verschieben kann, so wie es auch mit Absätzen möglich ist.
Das ist nicht trivial, wenn man wirklich die Funktionen "Nach unten schieben" und "Nach oben schieben" nachbilden will. Die nehmen nämlich alle Textformate mit. Das ist in einer Tabelle aber eine sehr komplexe Aufgabe, denn es gibt dort Formate an der Tabelle, an den Zeilen, an den Spalten, an jeder einzelnen Zelle *und* an den Textabsätzen mit ihren Textranges *in* den Zellen. Allerdings sollte man sich das manuelle Formatieren der einzelnen Tabellenteile ja ohnehin verbieten und stattdessen mit kompletten Tabellenformaten (Tabelle-Autoformat) arbeiten. Wenn es also *nur* um die Zellinhalte ohne Formate geht, dann muss *nur* die Reihenfolge im DataArray geändert werden. Das ist lösbar, siehe Anlage. Vor der Benutzung der Makros muss ein Textcursor in der Zeile der Tabelle stehen, die verschoben werden soll. Es darf *nicht* die komplette Zeile markiert sein und auch kein Zellbereich.

viele Grüße

Axel
Dateianhänge
TabelleZeilenVerschieben.odt
(22.07 KiB) 78-mal heruntergeladen
elch
*
Beiträge: 12
Registriert: Sa, 12.03.2011 21:19

Re: Navigieren in Tabellen, verschieben von Tabellenzeilen

Beitrag von elch »

Hallo Axel,

ich kapier von deinem Code nicht viel, aber er fasziniert mich ;).
Dank dafür.

Allerdings würde ich schon gern ein bischen frei rumformatieren in den Zellen, was dann auch mit verschoben werden soll.

Mittlerweile habe ich ein Makro mit Copy&Paste gebaut, das so läuft wie ichs haben will - nur dass die Zwischenablage dadurch überschrieben wird.

Hast du eine Idee wie man die Zwischenablage sichert und wieder zurückschreibt?
Nur Open-Office-Text (incl. Formatierungen) wäre wichtig, alles andere kann von mir aus überschrieben werden.

Wie kann ich feststellen, wieviele Zeilen in der Zwischenablage sind?

Gruß Frank
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Navigieren in Tabellen, verschieben von Tabellenzeilen

Beitrag von Axel Richter »

Hallo Frank,
elch hat geschrieben:Hast du eine Idee wie man die Zwischenablage sichert und wieder zurückschreibt?
Clipboard sichern und zurückschreiben geht so:

Code: Alles auswählen

'get the clipboard
oClipboard = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
'save the clipboard contents
oClipboardContents = oClipboard.Contents


'do something with the clipboard


'restore the clipboard contents
oClipboard.setContents(oClipboardContents, null)
Zum Lesen:
http://wiki.services.openoffice.org/wik ... n_Features
Das ich da null als ClipboardOwner nutze, gefällt mir noch nicht. Es funktioniert aber. Was nicht heißt, dass es richtig ist ;-).
elch hat geschrieben:Wie kann ich feststellen, wieviele Zeilen in der Zwischenablage sind?
*In* der Zwischwnablage wird das schwer. Dort sind keine Zeilen, sondern dort ist ein Objekt vom Typ com.sun.star.datatransfer.XTransferable, welches sich aus DataFlavors zusammensetzt. Das ist ein ganz allgemeines Konzept, damit es möglich ist, wirklich *beliebige* Daten per Clipboard transportieren zu können. Da etwas gezielt raus holen zu wollen, wird kompliziert.
Du hast doch aber die Selection, bevor Du diese ins Clipboard kopierst. Aus der Selection lässt sich einfacher was auslesen.

viele Grüße

Axel
Antworten