BASIC/JAVA Sperren und Freigabe von Makros/Funktionen

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

Moderator: Moderatoren

Raabun
**
Beiträge: 26
Registriert: So, 27.06.2004 14:13

BASIC/JAVA Sperren und Freigabe von Makros/Funktionen

Beitrag von Raabun »

Hi Leute,
noch eine kleine süße Frage:

- kann ich das Ausführen von Funktionen sperren?

Klar, das wird schon gehen, aber wie kann ich sie dann wieder freigeben, ohne mein Sheet neu laden zu müssen.

- kann ich das ganze auch über JAVA steuern?

Mein Ziel:
Erst baue ich mit JAVA mein Sheet auf, trage danach Werte ein oder nicht und starte dann die Berechnung.
Sinn der Aktion:
Beim Aufbau des Sheets sind alle Eingabewerte leer => warum, dann also mit den leeren Werten rechnen. Nach dem Aufbau werde ich Werte aus meiner Datenbank in das Sheet eintragen und dann erst will ich alles berechnen lassen.
Danach werden Werte geändert und jetzt soll alles immer sofort berechnet werden.

Gruß
Dirk-Uwe
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Der Sinn der Aktion erschließt sich mir nicht, liefern z.B. die Funktionen Fehlermeldungen in den Zellen solange noch keine Ausgangswerte veorhanden sind, kannst Du doch diesen Fall bereits bei den Funktionen berücksichtigen, aber wie auch immer. Du kannst zunächst die automatische Berechnung ausschalten und dann wieder einschalten und anschließend einmalig neuberechnen lassen. Von da ab erfolgt dann die Neuberechnung automatisch.
In OpenOffice konnte ich das mit dem Makrorekorder aufzeichnen:

Code: Alles auswählen

sub neu_berechnen
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())


end sub

Code: Alles auswählen

sub automatische_Berechnung_ausschalten_einschalten
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 = "AutomaticCalculation"
args1(0).Value = false 'oder true zum Einschalten

dispatcher.executeDispatch(document, ".uno:AutomaticCalculation", "", 0, args1())


end sub 
Wie das nun in JAVA geht weiß ich nicht, aber vielleicht reicht Dir ja meine Anregung um das selbst umzusetzen.


Gruß
Stephan
Raabun
**
Beiträge: 26
Registriert: So, 27.06.2004 14:13

Beitrag von Raabun »

Hi Stephan,
das Ausschlaten der Makros/Funktionen funkioniert super. Mein Sheet baut sich in einem Drittel der Zeit auf.
Genau das ist es was ich wollte.
Nur mit dem Einschalten hapert es noch, da ja alle Makros ausgeschaltet sind :shock:
Ich denke ich muß über F9 (neu berechnen) den Quatsch wieder anschmeißen

...oder ich finde noch die passende JAVA-Lösung...

Vielen Dank
Dirk-Uwe
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

das Ausschlaten der Makros/Funktionen funkioniert super. Mein Sheet baut sich in einem Drittel der Zeit auf.
Genau das ist es was ich wollte.
das kann ich als Begründung verstehen, Deine erste Erklärung war mir irgendwie nicht einleuchtend
Nur mit dem Einschalten hapert es noch, da ja alle Makros ausgeschaltet sind
es ist nur die automatische Neuberechnung der Funktionen in den Zellen abgeschaltet
Ich denke ich muß über F9 (neu berechnen) den Quatsch wieder anschmeißen
das macht das erste Makro, wenn es Dir also gelungen ist das zweite Makro in Deinen Code zu integrieren mußt Du nur nachdem dieses abgearbeitet ist (und damit die automatische Neuberechnung eingeschaltet wurde) ebend das erste Makro gleich im Anschluß ausführen und brauchst das nicht manuell zu machen.

Gruß
Stephan
Antworten