Ansteuerung eines Druckerschachts

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

Moderator: Moderatoren

zero77
Beiträge: 8
Registriert: Mi, 06.05.2009 11:37
Kontaktdaten:

Ansteuerung eines Druckerschachts

Beitrag von zero77 »

Hallo zusammen,

ich habe folgendes Problem:

Aus einer Fachanwendung heraus wird eine RTF-Datei erzeugt und mit Daten aus einer Datenbank gefüllt. Diese Datei wird automatisch in MS Word geöffnet. Den Ausdruck steuert ein Makro. Dieses sucht, ob auf einer Seite ein bestimmter String vorkommt. Danach richtet sich die Ansteuerung des Druckerfachs:

Kommt der (eindeutige) String vor, soll diese Seite des Dokument auf Fach1 (z.B. blaues Papier) ausgedruckt werden. Wird der String nicht gefunden, erfolgt der Ausdruck auf Fach2 (Standardfach mit weißem Papier).
Da wir planen, über kurz oder lang, auf OSS umzusteigen, erweisen sich solche Makros natürlich als super Bremse :) .

Das Word-Makro wurde durch eine Kombination von Aufzeichnen und Frickeln vor langer Zeit kreiert. Diese Aufzeichnung funktioniert unter OOo so nicht. Ich habe die Aufzeichnung jeweils für einen Schacht gestartet. Die Ergebnisse der Aufzeichnungen waren allerdings identisch, so dass ich nicht ableiten kann, wie und wann ein Schacht angesprochen werden.

Primär soll das Vorgehen unter OOo3 und Windows funktionieren. Als (spätere) Kür ist ebenfalls die Nutzung unter (Debian-) Linux angedacht. Unter beiden OS wird das Derivat OxygenOffice 3.01 eingesetzt.
Erschwerend kommt allerdings noch hinzu, dass meine Erfahrungen in der Makro-Programmierung zusammen genommen gen Null tendieren 8) .

Kurz und knapp
Das Makro soll schauen, ob ein String auf einer Seite vorkommt oder nicht. Kommt es vor, soll es diese eine Seite des Dokuments auf Fach1 ausgeben, wenn nicht sollen die Seiten auf Fach2 ausgegeben werden.

Nun zu meiner eigentlichen Frage:
Ist dies unter OOo überhaupt möglich und wenn ja, (natürlich) wie? Wie kann ich die Fächer direkt ansprechen?

Bei meinen Recherchen habe ich bislang leider noch nicht viel brauchbares und noch weniger aktuelles gefunden. Eigentlich ist dort immer höchstens beschrieben, wie man einen angeschlossenen Drucker herausbekommt/anspricht. Das gilt leider auch für die hier im Forum verlinkten Seiten.

Ich bin für jegliche Hilfe dankbar :) .

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

Re: Ansteuerung eines Druckerschachts

Beitrag von Charly »

Hallo Zero!

Die Einstellung für das Druckerfach wird in der Seitenvorlage abgespeichert.
Beim Writer sieht man das unter dem Menü-Punkt: Format-Seiteneinstellung-Seite-Papierzufuhr.

Diese Einstellung kann durch Makro verändert werden. Dazu braucht man den Namen der Seitenvorlage und den Namen des Druckerschachtes. Ich habe als Beispiel gewählt:
Writerdokument; Vorlage Standard; Schacht "Oberes Fach"

Code: Alles auswählen

Sub Druckerschacht()

Doc = ThisComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Standard")
DefPage.PrinterPaperTray = "Oberes Fach"

End Sub
Gruß
Charly
zero77
Beiträge: 8
Registriert: Mi, 06.05.2009 11:37
Kontaktdaten:

Re: Ansteuerung eines Druckerschachts

Beitrag von zero77 »

Hallo Charly,

vielen Dank, dass du dich meines Problems angenommen hast.
Da keimt doch tatsächlich Hoffnung in mir auf :) .

Allerdings erhalte ich folgenden Fehler, wenn ich das Makro aufrufen möchte:

Bild

Angemeckert wird die Zeile:

Code: Alles auswählen

DefPage.PrinterPaperTray = "Oberer Papierschacht"
Den Rest deines Makros habe ich 1:1 übernommen, nur den Namen des Fachs angepasst.
Kannst du/kann man etwas damit anfangen?

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

Re: Ansteuerung eines Druckerschachts

Beitrag von Charly »

Hallo Zero!

Die Fehlermeldung bedeutet, dass das Makro ein Objekt nicht findet. Überprüfe, ob deine Seitenvorlage wirklich "Standard" heißt und ob der Name des Schachtes richtig ist.

Code für Abfrage des Vorlagennamens

Code: Alles auswählen

Sub DruckerschachtVorlage()
Doc = ThisComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
PageFormat = PageStyles.getByIndex(0).name
MSGBOX(PageFormat)
end sub
Code für Abfrage des aktuell eingestellten Namen für den Schacht, wenn die Seitenvorlage "Standard" heißt:

Code: Alles auswählen

Sub DruckerschachtName()
Doc = ThisComponent
StyleFamilies = Doc.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
DefPage = PageStyles.getByName("Standard")
Schacht = DefPage.PrinterPaperTray
MSGBOX(Schacht)
End Sub
Vielleicht hilft dir das weiter.

Gruß
Charly
zero77
Beiträge: 8
Registriert: Mi, 06.05.2009 11:37
Kontaktdaten:

Re: Ansteuerung eines Druckerschachts

Beitrag von zero77 »

Ich habe beide Funktionen eingegeben.

Die erste wirft erwartungsgemäß Standard aus. Der Lauf der zweiten wird allerdings abgebrochen. Bei der Zuweisung von Schacht tritt der Fehler Objektvariable nicht belegt auf. Muss ich noch irgendwelche Zuweisungen, Importe machen, damit er dies findet?
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Ansteuerung eines Druckerschachts

Beitrag von Charly »

Hallo Zero!

Jetzt weiß ich auch nicht weiter. Ich habe den Code vom Starbasic-Handbuch von SUN übernommen. Bei mir hat er nun auf zwei Computern einmal mit Version Windows Xp und einmal Windows Vista geklappt. OpenOffice Version war einmal 2.41 und einmal 3.01.
Eine Rolle bei dem Papierschacht spielt natürlich auch, welcher Drucker eingestellt ist: Menü-Datei-Druckereinstellungen.

Ich habe hier kein xray, aber ich werde aber heute abend die Objekte damit überprüfen.

mfg
Koob
zero77
Beiträge: 8
Registriert: Mi, 06.05.2009 11:37
Kontaktdaten:

Re: Ansteuerung eines Druckerschachts

Beitrag von zero77 »

Mea Culpa,

oder: Wenn man's richtig macht, funktioniert es auch!

Das Problem war einfach, dass ich den Fachnamen aus dem Word-Makro in deine erste Funktion übernommen habe. Das geht so wohl nicht :? . Nachdem ich mir den übergebenen Wert der Variablen habe ausgeben lassen, lag die Lösung klar auf der Hand (Fach 1).

So funktioniert zumindest dein ursprüngliches Makro. Das Makro stellt nun den eingegeben Standardschacht ein. Nun muss ich nur noch die entsprechende Abfrage basteln und es sollte (hoffentlich) funktionieren.

Die Lösung der Frage, warum die Funktion DruckerschachtName abbricht, hat somit eigentlich nur noch ein akademisches Interesse.


Vielen Danke für deine Mühe, ohne die ich wohl immer noch in Googles Untiefen stecken würde!

Gruß Sven
Antworten