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
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.