Discussion:
Programm durch Makro mit Parameter aufrufen
Ruediger Kluge
2005-01-07 15:35:04 UTC
Permalink
Hallo,

ich möchte gerne folgendes erreichen:

in Calc habe ich in einer Zelle z.B. A1 einen Link auf eine .htm Datei
auf einem lokalen Computer. Der Link beinhaltet den kompletten Pfad zur
Datei. Wenn ich auf den Link klicke, geht mein Standardbrowser Mozilla auf.
Ich möchte aber, dass mein WEB-Editor Frontpage aufgeht. Den kann ich
aber nirgends als Standard-Browser eintragen, zumindest habe ich nicht
gefunden wo.

Die Idee ist nun, mit einem Klick auf das Feld A1 Frontpage
(frontpg.exe) aufzurufen und den Link als Parameter zu übergeben. Mit
Kommandozeile geht das.

Meine Frage:
geht das überhaupt mit OO-Basic?
gibt es ein Event "Klick auf Zelle" mit dem man ein Programm starte kann
kann man mit OO-Basic ein externes Programm starten?
was muss ich als erstes lesen, um zum Ziel zu gelangen.
vielen Dank
--
Gruß
Rüdiger

http://www.conelek.com/
Thomas Krumbein
2005-01-07 16:28:26 UTC
Permalink
Post by Ruediger Kluge
Die Idee ist nun, mit einem Klick auf das Feld A1 Frontpage
(frontpg.exe) aufzurufen und den Link als Parameter zu übergeben. Mit
Kommandozeile geht das.
geht das überhaupt mit OO-Basic?
Ja, mit dem Shell befehl -> siehe auch Basic Hilfe
Post by Ruediger Kluge
gibt es ein Event "Klick auf Zelle" mit dem man ein Programm starte kann
Hier wird es schwieriger. Es ist zwar möglich, ein Event zu definieren
(Zelle aktiv...), das sit aber nicht gerade trivial.

Wäre es nicht einfacher, einen Button einzufügen (aus den
Formularfeldern), diesen und diesen mit dem Makro zu verbinden (das ist
sehr einfach).
Post by Ruediger Kluge
kann man mit OO-Basic ein externes Programm starten?
Ja, siehe oben.
Post by Ruediger Kluge
was muss ich als erstes lesen, um zum Ziel zu gelangen.
Hmm, kommt auf die Vorerfahrung mit Makros an. Die Hilfe ist nicht
schlecht, aber wenn du noch nie ein Makro geschrieben hast, wird dir das
auch nichts bringen.

Der Link in der Zelle (das zu öffnende Dokument), ist der Fest oder
änderst du den häufig. Wieviel Zellen mit Links hast du? Mit ein paar
mehr daten fällt die Hilfe dann einfacher.

Gruss
Thomas
--
## Marketing deutschsprachiges Projekt
## http://de.openoffice.org - www.openoffice.org
## Vorstand OpenOffice.org Deutschland e.V.
## Mitglieder willkommen: www.OOoDeV.org
Ruediger Kluge
2005-01-07 17:40:49 UTC
Permalink
Hallo Thomas
Post by Thomas Krumbein
Post by Ruediger Kluge
Die Idee ist nun, mit einem Klick auf das Feld A1 Frontpage
(frontpg.exe) aufzurufen und den Link als Parameter zu übergeben. Mit
Kommandozeile geht das.
geht das überhaupt mit OO-Basic?
Ja, mit dem Shell befehl -> siehe auch Basic Hilfe
ok
Post by Thomas Krumbein
Post by Ruediger Kluge
gibt es ein Event "Klick auf Zelle" mit dem man ein Programm starte kann
Hier wird es schwieriger. Es ist zwar möglich, ein Event zu definieren
(Zelle aktiv...), das sit aber nicht gerade trivial.
Wäre es nicht einfacher, einen Button einzufügen (aus den
Formularfeldern), diesen und diesen mit dem Makro zu verbinden (das ist
sehr einfach).
Gut, ich könnte für jede zeile einen button definieren, vielleicht gibt
es aus so eine Art von Button Array.
Post by Thomas Krumbein
Hmm, kommt auf die Vorerfahrung mit Makros an. Die Hilfe ist nicht
schlecht, aber wenn du noch nie ein Makro geschrieben hast, wird dir das
auch nichts bringen.
OO = 0 Erfahrung, aber Erfahrung in Visual Basic 6.0. Ich muss als
erstes die prinzipielle Vorgehensweise in OO-Basic kennen lernen.
Post by Thomas Krumbein
Der Link in der Zelle (das zu öffnende Dokument), ist der Fest oder
änderst du den häufig.
ja, es soll der Bearbeitungsstatus der Datei erfasst werden. Zugriff auf
die Tabelle durch 3 Personen.
Frontpage hat so etwas eingebaut, super Bedienoberfläche, funkioniert
aber leider nicht richtig.

Wieviel Zellen mit Links hast du? Mit ein paar

ich würde es auf ca. 20-30 Zeilen begrenzen. Dateien gibt es ca. 300.
Post by Thomas Krumbein
mehr daten fällt die Hilfe dann einfacher.
Gruss
Thomas
--
Gruß
Rüdiger

http://www.conelek.com/
Thomas Krumbein
2005-01-08 09:46:12 UTC
Permalink
Hallo Rüdiger,
Post by Ruediger Kluge
[..]
Post by Thomas Krumbein
Wäre es nicht einfacher, einen Button einzufügen (aus den
Formularfeldern), diesen und diesen mit dem Makro zu verbinden (das ist
sehr einfach).
Gut, ich könnte für jede zeile einen button definieren, vielleicht gibt
es aus so eine Art von Button Array.
Das ist nicht nötig. Ein Button genügt. Es sei denn, das Dokument ist zu
gross, dann kannst du mehrer Buttons anbringen, die jeweils auf das
gleiche Makro zugreifen.
Post by Ruediger Kluge
Post by Thomas Krumbein
Hmm, kommt auf die Vorerfahrung mit Makros an. Die Hilfe ist nicht
schlecht, aber wenn du noch nie ein Makro geschrieben hast, wird dir das
auch nichts bringen.
OO = 0 Erfahrung, aber Erfahrung in Visual Basic 6.0. Ich muss als
erstes die prinzipielle Vorgehensweise in OO-Basic kennen lernen.
Hmm, wenn du VB kannst, ist es nicht so schwierig. Vieles ist ähnlich.
Such ma das Programmers Guide als Einstiegslektüre von Sun.
(vielleicht noch unter : ohne garantie
http://docs.sun.com/db/doc/817-3924?l=de )

Zum Einstieg hier ein bischen Code, sehr kurz, ohne Fehlerkorrekturen
etc. Da ich kein Frontpage habe, getestet mit einer einfachen Textdatei
und Notepad. Umsetzen auf Frontpage wirst du schaffen.

In Zelle B5 (aber die Adresse ist eigentlich egal, steht als Text
"E:\daten\test.txt", also die Datei inklusiv Pfad.

Einzige Voraussetzung ist: Cursor in dei Zelle oder die Zelle markieren,
jetzt Makro aufrufen (eben den Button betätigen):

sub LinkUebergabe
oZelle = thisComponent.getCurrentSelection()
sDatei = oZelle.String
shell("notepad.exe", 1, sDatei)
end sub

Das war es auch schon. Jetzt wird Notepad aufgerufen (auf den Pfad
kannst du verzichten, falls der Suchpfad des Betriebssystems diesen
beinhaltet, ansonsten angabe des Programms mit Pfad. Mit dem dritten
Parameter werden Argumente an den Programmaufruf übergeben, in dem Fall
die Datei.

Das soll nur die Prinzipskizze sein. Du müsstest eigentlich folgende
Fehler vorher abfangen: Mehr als eine Zelle selektiert, kein Dateiname
in der Selektion, Leerzeiche im Dateinamen (da gibt es Probleme bei der
Übergabe)....

Aber jetzt weist du, wie es geht, und der Anfang ist gemacht.

Gruss
Thomas
--
## Marketing deutschsprachiges Projekt
## http://de.openoffice.org - www.openoffice.org
## Vorstand OpenOffice.org Deutschland e.V.
## Mitglieder willkommen: www.OOoDeV.org
Jörg Schmidt
2005-01-08 13:55:02 UTC
Permalink
Hallo Rüdiger - Hallo Thomas,

ich habe die Diskussion verfolgt und mein gestriger "unkonventioneller"
Vorschlag war nur der Tatsache geschuldet das mir die gegebenen
(beschränkten) Möglichkeiten völlig klar sind.
Alles was hier bisher diskutiert wurde ist nicht bedienfreundlich bzw.
nicht intuitiv zu bedienen wenn man nicht die Zusammenhänge kennt
sondern die Tabelle nur benutzen will. Es ist ebend problematisch das es
das Ereignis "Bei Doppelklick" für die Zelle nicht gibt.

@Rüdiger
schau Dir doch mal das an:
http://www.amt-wiesbaden.de/downloads/Fahrtenbuch_Muster.sxc
http://www.amt-wiesbaden.de/downloads/BasicDokumentation-Fahrtenbuch.pdf
beides ist von Thomas erstellt und Du könntest es als Grundlage für eine
bedienfreundliche Lösung für Dein Problem verwenden. Insbesondere weil
Post by Ruediger Kluge
super Bedienoberfläche, funkioniert
aber leider nicht richtig.
Worauf ich hinaus will ist nur: Du mußt mit dem Auslösen des Ereignisses
von der eigentlichen Tabelle weg und mir scheint das Du sowas wie ein
Frontend für eine Calc-gestüzte Datenbank benötigst.
Rein optisch könnte es auch sein das eine solche Eingabemöglichkeit wie
Du sier erhältst wenn Du Formularfelder in ein leeres Tabellenblatt
einfügst Dir mehr gefällt, aber das ist dann letztlich Geschmacksfrage
und würde keine größeren Probleme verursachen.


@Thomas
wir wissen beide wie wir das Ereignis "Zelle aktivieren" mittels eines
Listeners dedektieren können, aber kennst Du evtl. einen prinzipiellen
Ansatz um einen Listener zu programmieren welcher das Ereignis
"Doppelklick auf Zelle" dedektiert? Das wäre hier nämlich eine
"bedientechnisch" relativ intuitive Lösung.

Gruß
Jörg
Ruediger Kluge
2005-01-08 22:53:05 UTC
Permalink
Hallo Jörg
Post by Jörg Schmidt
http://www.amt-wiesbaden.de/downloads/Fahrtenbuch_Muster.sxc
http://www.amt-wiesbaden.de/downloads/BasicDokumentation-Fahrtenbuch.pdf
Die Dateien habe ich gerade heruntergeladen und werde sie mal lesen. Der
Button "Eingabemaske" würde dem entsprechen was ich suche. Im Gegensatz
zu meinem Button ist der aber schon "aktiv", dh. ich kann mir seine
Eigenschaften nicht anschauen, warum? Er ist wohl mit der sub main
verknüpft.
"Das Makro “Main” wird nun dem Button „Eingabemaske“ im Tabellendokument
„Main“zugewiesen."
Auf jeden Fall ist die Applikation ein guter Ausgangspunkt für weitere
Studien.
--
Gruß
Rüdiger

http://www.conelek.com/
Ruediger Kluge
2005-01-08 22:12:53 UTC
Permalink
Hallo Thomas
Post by Thomas Krumbein
Das ist nicht nötig. Ein Button genügt. Es sei denn, das Dokument ist zu
gross, dann kannst du mehrer Buttons anbringen, die jeweils auf das
gleiche Makro zugreifen.
Jetzt habe ich verstanden, was du meinst.
Post by Thomas Krumbein
http://docs.sun.com/db/doc/817-3924?l=de )
Das habe ich mir runtergelanden und zunächst mal gelistet. Ebenso mal
die Hilfe durchgelesen. Einfache nicht event gesteuerte Progrämmchen
habe ich zum laufen gebracht.
Post by Thomas Krumbein
Zum Einstieg hier ein bischen Code, sehr kurz, ohne Fehlerkorrekturen
etc. Da ich kein Frontpage habe, getestet mit einer einfachen Textdatei
und Notepad. Umsetzen auf Frontpage wirst du schaffen.
In Zelle B5 (aber die Adresse ist eigentlich egal, steht als Text
"E:\daten\test.txt", also die Datei inklusiv Pfad.
Einzige Voraussetzung ist: Cursor in dei Zelle oder die Zelle markieren,
sub LinkUebergabe
oZelle = thisComponent.getCurrentSelection()
sDatei = oZelle.String
shell("notepad.exe", 1, sDatei)
end sub
Mir ist noch nicht klar, wie ich den Button Event mit der sub verknüpfe,
mit assign? Und kann ich den Button einfach in die Tabelle setzen, oder
muss ich einen Dialog erzeugen. Wenn ich ihn einfach in die Tabelle
setze und klicke auf den Button, wird er nicht geklickt, sondern
ausgewählt. Muss ich den Button noch igendwie "bekannt machen"?
Post by Thomas Krumbein
Aber jetzt weist du, wie es geht, und der Anfang ist gemacht.
Ja fast. Es fehlt nur noch ein bischen ;)
--
Gruß
Rüdiger

http://www.conelek.com/
Thomas Krumbein
2005-01-09 07:30:08 UTC
Permalink
Hallo Rüdiger,
Post by Ruediger Kluge
[..]
Mir ist noch nicht klar, wie ich den Button Event mit der sub verknüpfe,
mit assign? Und kann ich den Button einfach in die Tabelle setzen, oder
muss ich einen Dialog erzeugen. Wenn ich ihn einfach in die Tabelle
setze und klicke auf den Button, wird er nicht geklickt, sondern
ausgewählt. Muss ich den Button noch igendwie "bekannt machen"?
Das sind die kleinsten Probleme. Einen eigenen Dialog benötigst du
übrigens nicht - wäre der Aufgabe wohl etwas überdimensioniert.
Setz den Button einfach irgendwo in die Tabelle (zum Beispiel hinter die
Spalte mit den Dateinamen - oder davor? - du kannst ihn auch ziemlich
"lang" machen und so viele, viele Zeilen überdecken).
Dann ruft du das Kontrollfeld auf (Button markieren, rechte Maustaste,
Kontextmenü) dort gehst du dann auf "Ereignisse" und wählst
beispielsweise "beim Auslösen". Klick auf den rechten Button dieser
Zeile, es öffnet sich das Makro-Zuweisungsfenster. (gilt alles nur für
Version 1.x, ab 1.9mxx ist es einfacher). Dort wählst du jetzt unten
links die entsprechende Makrobibliothel und das Modul, unten links
erscheinen die einzelnen Sub oder Functionen. Markiere die gewünschte
und klicke auf den Button "zuweisen" Sehr wichtig! Nicht auf OK drücken,
dann wäre die Zuweisung wieder weg! Jetzt sollte im Oberne Fenster das
Makro dem Ereignis zugewiesen sein. Überprüfen! Jetzt erst auf OK
drücken, dadurch schliesst sichdas Fenster, das Makro ist dem Ereignis
zugeordnet.
Das war es auch schon. Jetzt musst du nur noch den
Formular-Entwurfsmodus ausschalten (sonst tritt der von dir geschilderte
Effekt auf) - Im Abreisfenster Formular-Funktionen (dort wo du den
Butten gefunden hast) gibt es auch eine Schaltfläche "Entwurfsmodus
an/aus" (viert letzte oder so). Ist der Entwurfsmodus aus, kannst du den
Butten betätigen.

Ich hoffe, es hilft.


@Jörg:
Der Aufwand, einen Listener zu schreiben um auf das Doppelklick Ereignis
zu reagieren, erscheint mir für eine solche Anwendung deutlich
überzogen. Das Makro müsste dann ja auch die ganze Zeit im Hintergrund
laufen, um entsprechend reagieren zu können.
Das MouseEventObjekt kennt sowohl die Anzahl der Klicks als auch die
entsprechenden Tasten. Insofern wäre es schon möglich, eine
entsprechende Routine zu schreiben. Aber.... ich bin für pragmatisch
einfache Lösungen.

Gruss
Thomas
--
## Marketing deutschsprachiges Projekt
## http://de.openoffice.org - www.openoffice.org
## Vorstand OpenOffice.org Deutschland e.V.
## Mitglieder willkommen: www.OOoDeV.org
Ruediger Kluge
2005-01-09 12:18:38 UTC
Permalink
Hallo Thomas,
Post by Thomas Krumbein
Das war es auch schon. Jetzt musst du nur noch den
Formular-Entwurfsmodus ausschalten (sonst tritt der von dir geschilderte
Effekt auf) - Im Abreisfenster Formular-Funktionen (dort wo du den
Butten gefunden hast) gibt es auch eine Schaltfläche "Entwurfsmodus
an/aus" (viert letzte oder so). Ist der Entwurfsmodus aus, kannst du den
Butten betätigen.
Genau das war der Punkt (Design Mode on/off), an dem es gestockt hat.
Irgendwie habe ich den Punkt immer wieder übersehen. Jetzt komme ich
weiter :) und kann OO-Basic auch für andere Sachen nutzen und jetzt kann
ich auch das Fahrtenbuch untersuchen.
Post by Thomas Krumbein
Ich hoffe, es hilft.
Ja das hat sehr geholfen! Vielen Dank für die Hilfe! Vielen Dank auch an
Jörg.
--
Gruß
Rüdiger

http://www.conelek.com/
Jörg Schmidt
2005-01-07 16:59:40 UTC
Permalink
Hallo Rüdiger,
Post by Ruediger Kluge
in Calc habe ich in einer Zelle z.B. A1 einen Link auf eine
.htm Datei
auf einem lokalen Computer. Der Link beinhaltet den
kompletten Pfad zur
Datei. Wenn ich auf den Link klicke, geht mein
Standardbrowser Mozilla auf.
Ich möchte aber, dass mein WEB-Editor Frontpage aufgeht. Den kann ich
aber nirgends als Standard-Browser eintragen, zumindest habe
ich nicht
gefunden wo.
Naja, Du kannst Frontpage nicht als StandardBrowser definieren, da es
kein Browser in dem Sinne ist. Du kannst Frontpage natürlich als
Standardprogramm für *.htm, *.html definieren, das wäre aber nun eine
wenig clevere und ziemlich extreme Maßnahme.
Da die anderen Sachen die Du willst (Programm mit Parameter starten,
Klick auf Zelle für Event) sich zwar alle realisieren lassen, es aber
einen hohen Aufwand erfordert das das alles bedienfreundlich ist, mache
ich Dir in Kenntnis des Obenstehenden folgenden unkonventionellen,
jedoch bedienfreundlichen und einfachen Vorschlag:
Du hast eine Datei beispiel.htm die Du wie beschrieben verlinken willst
so das sie in Frontpage geöffnet wird. Erstelle zunächst eine Kopie der
Datei und benenne diese Kopie dann um in beispiel.abc.
Doppelklicke diese Datei und Windows fragt Dich womit Du öffnen willst
(Dateityp *.abc ist ja unbekannt), gib als Programm Frontpage an und
aktiviere die Option 'immer mit diesem Programm öffnen'.
Nun benenne zukünftig alle Dateien welche aus der Calc-Tabelle mit
Hyperlink geöffnet werden sollen in die neue Dateiendung um und alles
läuft wunderbar.

Ist jetzt wirklich unkonventionell, und ich schlage das _nur vor weil_
Du ja offensichtlich bereit wärst Frontpage zum Standard-Browser zu
machen, aber sehr bedienfreundlich.

Gruß
Jörg
Loading...