🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ 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. 🤗

Aus MSWord Kopiertes in Writer einkleben / Makro?!

Alles zur Programmierung im LibreOffice.
Antworten
Eric March
Beiträge: 54
Registriert: Do 16. Jun 2011, 16:08

Aus MSWord Kopiertes in Writer einkleben / Makro?!

Beitrag von Eric March » Mo 13. Feb 2012, 19:59

Hallo!

Die Frage scheint trivial, aber ich würde sie nicht stellen wenn ich da nicht an einem Stolperstein hängen bliebe. Ärgerlich dabei ist, dass ich keine Idee habe was dort genau schief geht und und ob ich anderweitig angreifen kann statt mir einen Workaround-Vorgang per Makro abbilden zu lassen.

Ausgangspunkt ist (ein aus einer anderen Anfrage bekanntes…) längeres MSWord Dokument. Ein Dokument vom Dateityp MSW97. Ich wurde vor geraumer Zeit liebevoll überredet von MSO97 auf MSO2k zu wechseln (oh ja, wir leben hier weit in der Vergangenheit ;) ) und wenn mich die Erinnerung nicht täuscht ist mit dem Wechsel das eigentliche Problem eingetreten.

Von Zeit zu Zeit, sprich wenn sie gefüllt ist, kopiere ich eine Seite aus meinem Quelldokument per Copy-Paste in das Gegenstück in Writer (das ergab sich so aus mehreren Erwägungen heraus). Genauer gesagt konnte ich das bisher tun. Nun aber stimmt (so weit das Auge reicht) die Absatzhöhe nicht mehr; aus 10pt werden 12, die ›Leerzeile‹ (¶) wird von einem Leerzeichen eingeleitet; und obwohl alles auf Null steht scheinen auch die Absatzabstände gewachsen zu sein. Der Rest stimmt so weit, aber Tabs wurden willkürlich zu Leerzeichen.

Bisher einzige Abhilfe: explizit als RTF einkleben. Das allein ärgert mich schon, obwohl ich die Ursache außerhalb von LO zu suchen gewillt bin. Also zeichnete der Brave Landser Bearbeiten • Inhalte einfügen • RTF auf:

Code: Alles auswählen

sub UnfomatTextRTFeinfuegen
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SelectedFormat"
args1(0).Value = 10
dispatcher.executeDispatch(document, ".uno:ClipboardFormatItems", "", 0, args1())
end sub
Da der bewusste Landser gelernt hat, dass Dispatchercode ja »bäh« ist würde er diesen Code gerne gegen eine vernünftige Variante tauschen. Außer jemand kann Hinweise geben wie das Grundübel an sich zu packen wäre.

Eric March

Eric March
Beiträge: 54
Registriert: Do 16. Jun 2011, 16:08

Re: Aus MSWord Kopiertes in Writer einkleben / Makro?!

Beitrag von Eric March » Sa 18. Feb 2012, 17:41

Hallo!
Ich hatte gehofft, dass es einen systematischen Fehler gibt der Schuld daran ist, dass ich die Textstücke aus MSO nicht einfach einkleben kann, und den man elegant umschiffen könnte. Offenbar bleibt mir aber nur der weg über RTF.
Da ich das wiederum gern per Mausklick erledigt hätte brauche ich ein Makro, und zwar ein ohne diesen Dispatchercode. Wer kann mir helfen?

Eric March

Eric March
Beiträge: 54
Registriert: Do 16. Jun 2011, 16:08

Re: Aus MSWord Kopiertes in Writer einkleben / Makro?!

Beitrag von Eric March » Do 23. Feb 2012, 17:55

Unter Verweis auf diesen Fall allein Writer betreffend scheine ich nicht umhinzukommen das Ganze doch als Makro zu benötigen.

Google führt mich mit schlafwandlerischer Sicherheit zu den Begriffen Aufzeichen und Dispatcher.
Für den oberen Fall habe ich hier schon erfolgreich Hilfe bekommen…

Code: Alles auswählen

sub SpeichernUndPOS1
rem Konkret: POS1, Space, BackSpase, Save - um Position im Text festzuschreiben
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = " "
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
end sub


sub UnfomatTextRTFeinfuegen
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SelectedFormat"
args1(0).Value = 10
dispatcher.executeDispatch(document, ".uno:ClipboardFormatItems", "", 0, args1())
end sub
…für den unteren brauche ich sie da unter LO 3.4.5 die Zeile «dim args1(0) as new com.sun.star.beans.PropertyValue» in beiden Fällen abbricht. ZZ. leider in einer Testumgebung befindlich in, der LO 3.3.2 installiert ist, kann ich die Fehlermeldung nicht zitieren weil derselbe nicht auftritt: der Dispatchercode läuft in jener Version einwandfrei.

Eric March


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