Seite 1 von 1
Beim Sichern Warnungsfenster verhindern
Verfasst: So, 12.12.2004 21:30
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
Verfasst: Mo, 13.12.2004 08:28
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
Verfasst: Mo, 13.12.2004 09:39
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
Verfasst: Mo, 13.12.2004 10:17
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
Verfasst: Mo, 13.12.2004 13:22
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
Verfasst: Mo, 13.12.2004 13:46
von Hago
Hallo Charly,
danke, es funktioniert.
Das war ja einfach.
Ich habe es mir viel trickreicher vorgestellt.
Gruß, Hago
Verfasst: Di, 14.12.2004 09:45
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
Verfasst: Di, 14.12.2004 11:22
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
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
Verfasst: Di, 14.12.2004 12:35
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
Verfasst: Di, 14.12.2004 12:52
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
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