Beim Sichern Warnungsfenster verhindern

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

Moderator: Moderatoren

Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Beim Sichern Warnungsfenster verhindern

Beitrag von Hago »

Hallo,

ich habe eine*.sxc-Datei.
Mit der wird per Makro so einiges angestellt. Es wird auch eine neue Tabelle hergestellt, in die Teile anderer eingefügt werden. Diese wird dann irgendwann als *.csv-Datei gespeichert.
Just in diesem Moment poppt immer ein kleines Fenster hoch und warnt mich, daß aber nur die aktuelle Tabelle gespeichert wurde.
Solange ich nicht auf "OK" geklickt habe, geht der Ablauf nicht weiter.

Das stört sehr. Deshalb hoffe ich, daß es eine Möglichkeit gibt, dieses Fenster zu unterdrücken.

Die Stelle, an der gesichert wird, sieht jetzt so aus:
...............
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args7())
...............

In der Hilfe habe ich leider nirgends etwas Erhellendes über mögliche Parameter von "Save" gefunden.

Gibt es da eine Möglichkeit?

Gruß, Hago
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Hago,
In der Hilfe habe ich leider nirgends etwas Erhellendes über mögliche Parameter von "Save" gefunden.
Gibt es da eine Möglichkeit?
Ja, die gibt es schon. Allerdings nicht im dispacher-Mode - oder vielleicht dort auch, das weis ich aber nicht.
Üblicherweise speicherst du ein Dokument im Basic-Code direkt, mit der Methode storeAsUrl( sUrl, aFileProperties()). Also Beispiel:

Code: Alles auswählen

...
Dim oDoc as Object, sURL as String
Dim aFileProperties() as New com.sun.star.beans.propertyValue
oDoc = ThisComponent   ' oder wie du es eben sonst so initalisiert
.... hier könntest du noch Eigenschaften zum Speichern definieren
sUrl = "file:///c:/irgend/ein/Pfad/test.sxc"
oDoc.storeAsUrl( sUrl, aFileProperties())
In den FileProperties gibst du zum Beispiel die Filter an und was es sonst noch so gibt.
Zum Einlesen solltest du dir das folgende Dokument zu Gemühte ziehen: http://docs.sun.com/db/doc/817-3924?l=de, ist das Sun Programmierhandbuch.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Beitrag von Hago »

Hallo Thomas,

danke,
so ähnlich wie Du schreibst, habe ich es inzwischen gemacht (ich habe eine zwar kleine aber verständliche Doku gefunden, sogar auf deutsch).

Seit der Dispatcher da nicht mehr mitmischt, wird gespeichert und die Fehlermeldung kommt nicht, jedoch wird der anschließende Shell- Aufruf nicht mehr ausgeführt, was bisher funktioniert hat.
Woran könnte das liegen?

So sieht das jetzt aus:

dokument.storeAsURL(sUrl1$, args7()) 'bis hier läuft alles glatt
Shell("C:\perl\bin\perl.exe ftp-upload-CSV.pl",1)

Hago
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Beitrag von Hago »

...jedoch wird der anschließende Shell- Aufruf nicht mehr ausgeführt...
Stimmt nicht, alles klappt - war nur ein Tippfehler.

Jetzt sollte sich das OO-Fenster nur noch selbst schließen.
Gibt es da 'ne Möglichkeit?

Hago
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!

Jetzt sollte sich das OO-Fenster nur noch selbst schließen.
Gibt es da 'ne Möglichkeit?
Versuch es mit dem Befehl:

Code: Alles auswählen

dokument.storeAsURL(sUrl1$, args7()) 
Shell.......
dokument.close(false)
gruß
Charly
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Beitrag von Hago »

Hallo Charly,

danke, es funktioniert.

Das war ja einfach.
Ich habe es mir viel trickreicher vorgestellt.

Gruß, Hago
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Beitrag von Hago »

Hallo,

ich habe jetzt versucht "dokument.close(false)" nach print() zu benützen.
Seltsamerweise funktioniert der Befehl da nicht.

Code: Alles auswählen

sub Druck

dim document   as object
dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$D$4"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

Dok   = ThisComponent
Controller = Dok.CurrentController 
Blatt = Controller.ActiveSheet 
Zelle = Blatt.getCellRangeByName("$D$3") 
Wert = Zelle.Value 

dim args3(2) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Copies"
args3(0).Value = Wert
args3(1).Name = "RangeText"
args3(1).Value = "1-2"
args3(2).Name = "Collate"
args3(2).Value = false

Dok.print(args3())
Dok.close(false)
Erst kommt eine Fehlermeldung:

BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type:com.sun.star.util.CloseVetoException
Message: Controller disagree ...

dann wird gedruckt, aber geschlossen wird nicht.

Übrigens: den Dispatcher benütze ich, weil sonst nach dem Eintrag in das Tabellenfeld D3 der Fokus auf dem Tabellenfeld bleibt und der Wert nicht zur Verfügung steht.

Kann mir jemand sagen, was ich ändern muss?

Gruss, Hago
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Hago,
Kann mir jemand sagen, was ich ändern muss?
Die Problematiik liegt in der Verwendung des Print-Befehls und des Close Befehls. Der Printbefehl bewirkt eine neue funktion, die Zeit benötigt. Der Programminterpreter wartet aber nicht, bis die Druckfunktion abgeschlossen ist, sondern geht sofort zur nächsten Zeile um den dort folgenden Code auszuführen. Da aber der Controller noch benötigt wird (zum Drucken) kann das Dokument - noch - nicht geschlossen werden. Der Befehl bewirkt eine Fehlermeldung, der Interpreter geht zur nächsten Zeile.
Die Lösung: Tia, entweder eine Wait() Zeile einbauen, oder besser, du gibst eine zusätzliche Option dem Print-Befehl, dass er erst die Kontrolle an den Interpreter zurückgibt, wenn er fertig ist. Also so etwas wie

Code: Alles auswählen

args4(3).name = "Wait"
args4(3) = true
Du musst natürlich den Array entsprechend anpassen. Jetzt wartet der Interpreter, bis der Drucker fertig gedruckt hat und führt erst dann die nächste Zeile - also den Close befehl - aus. Jetzt sollte es funktionieren.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Beitrag von Hago »

Hallo Thomas,

danke, klappt.

Woher erfährt man eigentlich solche Details, wenn nicht im Forum?
Ich habe schon erst in der DevelopersGuide und auf einigen deutschen Hilfeseiten unter "print" und "close" nachgeschaut, aber nichts gefunden.

Gruß, Hago
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Hago,
Woher erfährt man eigentlich solche Details, wenn nicht im Forum?
Tia, gute Frage... zum Beispiel in meinem Buch, dass hoffentlich im April zur 2.0 auch erscheinen wird - OOo Basic :wink:
Ansosnten - selbst ausprobieren, Foren befragen (gibt auch englischsprachige), API lesen, Kommunikation mit anderen Community-Mitgliedern,
Workshop des Projektes besuchen (z.B. 5./6. 2. 05 im Linuxhotel in Essen) und so weiter. Ist viel Arbeit und Erfahrung...

Aber dein Weg ist schon gut.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten