Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


Hallo Hans,

eigentlich weisst Du ja, warum es nicht geht;)

Lädst Du das Dokument "hidden", gibt es keinen Frame - also kein Fenster. Das Objekt (oDoc) existiert nur im Hauptspeicher.

Was immer Du mit Makros machen möchtest... vergiss den Dispatcher Code. DA du keine Ahnung hast, was der tatsächlich im Hintergrund macht und keine "echte" Kontrolle ausüben kannst, nutze ihn gar nicht oder nur im äußersten Notfall.

Sowohl bei Pitoniak als auch in dem Makro-Grundlagen Buch kannst Du recht anschaulich die Basis-Programmierung erlernen - ohne je auf Dispatcher Code ausweichen zu müssen.

Deine Aufgabenstellung hingegen ist sehr einfach:

bis zurZeile oDoc übernehmen. Jetzt hast Du das Objekt des Dokumentes im Speicher.

Zugriff auf das Zellobjekt (hier Zelle A1 des Tabellenblattes):

oZelle = oDoc.getSheets().GetByName("<NamedesTabellenblattes>").getCellRAngeByName("A1")

Die Zelle kann drei unterschiedliche Inhalte aufnehmen: Texte, Formeln oder Zahlen (Werte). Du möchtest einen String (Text) reinschreiben.

oZelle.string = "Hello World!"

Fertig.

Jetzt noch Dokument speichern:

oDoc.store()

und schliessen

oDoc.close(true)

Es gibt ein paar Nebenbedingungen, weitere Prüfungen und Sachen, die Du machen könntest oder anpassen solltest ... aber das würde hier zu weit führen. Beschäftige Dich wirklich mit den Grundlagen:)

Hier die Makro Zusammenfassung:

Sub RunMacroHidden

Dim oD as Object
Dim oDoc as Object
Dim oF as Object
Dim PathFile as String

PathFile = "E:\TMP\RunMacroHidden.ods"

aPV1(0).name = "Hidden"
aPV1(0).value = True

oDoc = StarDesktop.loadComponentFromURL(ConvertToURL(PathFile),"_blank",0,aPV1()) oZelle = oDoc.getSheets().GetByName("<NamedesTabellenblattes>").getCellRAngeByName("A1")
oZelle.string = "Hello World!"
oDoc.store()
oDoc.close(true)

end sub

VG Thomas

Am 11.11.2017 um 19:47 schrieb OoOHWHOoO:
Hallo,

folgendes Makro-Problem:

Mit einem kleinen Perl-Programm [2] starte ich ein Makro [1], das (in diesem vereinfachten Beispiel) weiter nichts tut, als in einer bestehenden CALC-Datei ("E:\TMP\RunMacroHidden.ods") in die Zelle "A1" die Zeichenkette "Hello world !" zu schreiben

So lange die beiden Makro-Zeilen | ' aPV1(0).name = "Hidden" | und | ' aPV1(0).value = True | (entnommen von [4]) auskommentiert sind funktioniert alles prima.

Jetzt möchte ich aber, dass das Ganze "Hidden" abläuft, die Tabellendatei nicht geöffnet wird.

Wenn ich nun die beiden oben genannten Zeilen de-kommentiere, kommt für die Makrozeile "oF = ThisComponent.CurrentController.Frame" die Fehlermeldung "BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: CurrentController."

Im Prinzip meine ich schon zu verstehen, warum: Da nix mehr angezeigt wird, gibt es wohl auch keinen "CurrentController". Und in Folge davon hat dann auch die Objekt-Variable "oF", die bei den "uno"-Kommandos benötigt wird, sicherlich auch keinen Inhalt.

So meine Frage:

Was muss man anders beziehungsweise noch zusätzlich angeben, damit die Fehlermeldung nicht mehr kommt und die Objekt-Variable "oF" die "uno"-Kommandos mit der benötigten Information versorgt ?

In [3] "OpenOffice.org-Makros" sowie [4] "OpenOffice.org Makros - Kochbuch" wird zwar eine Menge zur Funktionsweise von "StarDesktop"/"Frames" ausgeführt und in [4] erscheint mir die Zeile "oDoc.getCurrentController().getFrame().getContainerWindow().setVisible(true)" sehr hinweisverdächtig was zu tun ist, aber dennoch hat es bei mir nicht den Geistesblitz für die richtigen Schlussfolgerungen erzeugt  - leider, ich komme da nicht wirklich weiter :-(( ...

Vielen Dank im Voraus für Hinweise und Tipps,

Grüße
Hans-Werner

---------------

[1] Makro

Sub RunMacroHidden

Dim oD as Object
Dim oDoc as Object
Dim oF as Object
Dim PathFile as String
Dim aPV1(0) as New com.sun.star.beans.PropertyValue

PathFile = "E:\TMP\RunMacroHidden.ods"
oD = createUnoService("com.sun.star.frame.DispatchHelper")

' aPV1(0).name = "Hidden"
' aPV1(0).value = True

oDoc = StarDesktop.loadComponentFromURL(ConvertToURL(PathFile),"_blank",0,aPV1())
oF = ThisComponent.CurrentController.Frame

aPV1(0).Name = "Nr"
aPV1(0).Value = 1
oD.executeDispatch(oF,".uno:JumpToTable","",0,aPV1()

aPV1(0).Name = "ToPoint"
aPV1(0).Value = "A1"
oD.executeDispatch(oF,".uno:GoToCell","",0,aPV1())
aPV1(0).Name = "StringName"
aPV1(0).Value = "Hello world !"
oD.executeDispatch(oF,".uno:EnterString","",0,aPV1()

aPV1(0).Name = "ToPoint"
aPV1(0).Value = "A1"
oD.executeDispatch(oF,".uno:GoToCell","",0,aPV1())
oD.executeDispatch(oF,".uno:Save", "",0,Array())
oD.executeDispatch(oF,".uno:CloseDoc","",0,Array())
oD.executeDispatch(oF,".uno:CloseWin","",0,Array())

End Sub

[2] Externer Makro-Aufruf via Perl

use strict;
use warnings;

my $L; # Libre Office
my $M; # Makro

$L = "C:/Program Files/LibreOffice 5/program/soffice.exe";
$M = "macro:///Standard.Temporary.RunMacroHidden";

`"$L" --nologo "$M"`;

---------------

[3] Andrew Pitonyak: OpenOffice.org-Makros erklärt - Ins Deutsche übertragen und mit einem Beitrag von Volker Lenhardt ( http://www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.odt )

[4] Thomas Krumbein: OpenOffice.org Makros - Kochbuch ( https://www.wollmux.net/wiki/images/f/f9/Makro_Kochbuch.pdf )



--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.