Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Word Landscape

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Word Landscape

Beitrag von Rolf Ramacher » Mi, 05. Okt 2016 9:00

guten Morgen,

ich drucke eine bestehende Datei (kein word oder RTF) - über Word aus. Kann ich beim Drucken Word mitgeben Drucke bitte in Landscape ?-

in der Doku printout für word finde ich da nichts.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Mi, 05. Okt 2016 9:06

Hast du mal eine Macroaufzeichnung probiert ?
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Mi, 05. Okt 2016 9:15

Code: Alles auswählen

Sub Makro1()
'
' Makro1 Makro
'
'
    If Selection.PageSetup.Orientation = wdOrientPortrait Then
        Selection.PageSetup.Orientation = wdOrientLandscape
    Else
        Selection.PageSetup.Orientation = wdOrientPortrait
    End If
    Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
        wdPrintDocumentWithMarkup, Copies:=1, Pages:="", PageType:= _
        wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _
        PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0
End Sub
ALso ich denke Word Objekt erstellen, datei laden ... Dieses Dokument müsste dann die Selection sein da brauchen wir ein oPage Objekt und dann PageSetup...
Gruß
Hubert

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1806
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Word Landscape

Beitrag von Herbert » Mi, 05. Okt 2016 9:27

Das Dokument ist doch bereits im richtigen Format bestehend? Das wird doch übernommen. Oder irre ich da?
Grüsse Herbert
Immer in Bewegung...

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Mi, 05. Okt 2016 9:32

Hallo herbert

nein eben nicht. Ich möchte das am liebsten automatisch auf Landscape umstellen und dann ausdrucken, anstatt dies dem Kunden zu überlassen.

ich habe dies jetzt im quellcode so eingebaut:

Code: Alles auswählen

oWord:Selection:PageSetup:Orientation:=wdOrientLandscape             
aber bei wdorientLandscape kommt Meldung umbekannte variable
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Mi, 05. Okt 2016 9:33

Meinst du mit Printout, den Commandozeilen Aufruf mit direktem Drucken ?
Wenn ja, falsche Rubrik und keine Ahnung ob das geht, da ein DOCX Dokument seine Ausrichtung kennt !

Die ist die Rubrik ActiveX :!:
Keine Kommandozeile, sondern ein wordobjekt, und dieses muss die Textdatei öffnen ... dann drucken.
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Mi, 05. Okt 2016 9:34

Rolf Ramacher hat geschrieben:

Code: Alles auswählen

oWord:Selection:PageSetup:Orientation:=wdOrientLandscape             
aber bei wdorientLandscape kommt Meldung umbekannte variable
dann fehlt die Word.ch - oder ist zu alt ...
Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Mi, 05. Okt 2016 10:33

die word.ch habe ich nicht.

kann ich mir die irgendwo herunterladen, oder kann mir jemand die zur Verfügung stellen?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Mi, 05. Okt 2016 10:49

die findest du bei den ActiveX Beispielen von Xbase++, wobei die älter ist (word 2003) ... dachte ich zumindest, aber in dem Ordner ist keine.

Bei Excel wird man fündig (excel.ch) und da findet man auch die Erklärung zu dem Tool. Für neue (2007 oder 2010) muss man sich die mit dem Tool erzeugen:

Code: Alles auswählen

//////////////////////////////////////////////////////////////////////
//
//  EXCEL.CH
//
//  Copyright:
//   Alaska Software, (c) 2002-2009. Alle Rechte vorbehalten.         
//  
//  Inhalt:
//   Diese Datei wurde mit tlb2ch.exe erzeugt
//  Bemerkungen:
//   Entnehmen Sie bitte das Parameterprofil von tlb2ch.exe der
//   Online Dokumentation
//  Syntax:
//   tlb2ch.exe excel.application > excel.ch
//   
//  Return:
//////////////////////////////////////////////////////////////////////
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Mi, 05. Okt 2016 11:10

tlb2ch word.application > word.ch

ergibt - für Word 2010 !

Code: Alles auswählen

////////////////////////////////////////////////////////////////////////////////
//
// Automatisch generiertes Header File
//
// Programm ID:            WORD.APPLICATION
//
// Erstellungs Datum:      05.10.2016
//
// Erstellungs Werkzeug:   tlb2ch.exe
//
//                         Copyright (c) Alaska Software. Alle Rechte vorbehalten.
//
////////////////////////////////////////////////////////////////////////////////

#ifndef _WORD_APPLICATION_HEADER_DAEMON

*** zu lang ***

// Enumeration WdOrientation
#DEFINE wdOrientPortrait                                                         0
#DEFINE wdOrientLandscape                                                        1

***

#define _WORD_APPLICATION_HEADER_DAEMON
#endif //_WORD_APPLICATION_HEADER_DAEMON
Dateianhänge

[Die Dateierweiterung ch wurde deaktiviert und kann nicht länger angezeigt werden.]

Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Mi, 05. Okt 2016 11:12

danke hubert

werde es versuchen, ob es klappt
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Fr, 07. Okt 2016 9:18

so das mit landscape hat funkt. kann ich auch hier bei schriftart + größe für den Dateiinhalt mitgeben??

ich habe da in der word.ch gefunden, bin mir aber nicht sicher ob dies so richtig ist

hier gibt es einen compiler-fehler syntax- Error

Code: Alles auswählen

		oWord:Selection:PageSetup:=Worddialog:wdDialogFormatFont:="8. Courier New"

weiß jemand hier Bescheid ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Fr, 07. Okt 2016 10:20

kannst du den Code der das Wordobjekt steuert (mit dem Landscape) mal zeigen ?

Wie immer im Macro testen, ich denke das Ändern des Standardfonts (Normal) sollte helfen.
Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Fr, 07. Okt 2016 11:23

Hi Hubert,

Code: Alles auswählen

		oWord:Selection:PageSetup:Orientation:=wdOrientLandscape             
das geht
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Fr, 07. Okt 2016 11:25

Hi,

ich meinte auch die Zeilen darum (also von oWord generierung bis zum Ausdruck / Schließen) ...
Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Fr, 07. Okt 2016 11:30

Code: Alles auswählen

   oWord:visible   := .f.                               // Word unsichtbar! 
   cActivePrinter  := oWord:Activeprinter     // aktuellen Drucker feststellen 
   oWord:Activeprinter:= cDrucker               // Neuen Drucker setzen 
   oWord:documents:Open(cDoc)     
	If cDoc="lker.lit"
		oWord:Selection:PageSetup:Orientation:=wdOrientLandscape             
*		oWord:Selection:PageSetup:=Worddialog:wdDialogFormatFont:="8. Courier New"
	Endif 
   oDoc       := oWord:ActiveDocument 
	Do Case
		Case AT("filbestandliste2.rtf",cDoc) > 0
			aSeite:=oDlg:pageRangeSelected
			oDoc:PrintOut(.f.,Nil,wdPrintFromTo,Nil,alltrim(str(aSeite[1])),alltrim(str(aSeite[2])),Nil,1 )
		Case AT("maengel",cDoc) > 0
			nCopie:=oPrinter:SetNumCopies()
			oDoc:PrintOut(.f.,Nil,Nil,Nil,Nil,Nil,Nil,nCopie )
	Otherwise
	   oDoc:PrintOut(.f.)    
	EndCase                    
   oWord:Activeprinter:= cActivePrinter       // alten Drucker setzen 
   oDoc:close() 
   oWord:Quit() 
   oWord:destroy() 
   oWord := NIL 
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Fr, 07. Okt 2016 11:44

Code: Alles auswählen

oWord:Selection:PageSetup:=Worddialog:wdDialogFormatFont:="8. Courier New"
wenn man das übersichtlicher schreibt, wird der Fehler sofort sichtbar, leider kenne ich die richtige Syntax auch nicht:

Code: Alles auswählen

oWord:Selection:PageSetup   :=   Worddialog:wdDialogFormatFont    :=    "8. Courier New"
es könnte eine Eigenschaft von PageSetup sein, aber diese Zeile ersetzt den Pagesetup mit der Rückgabe von Worddialog:wdDialogFormatFont !
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Fr, 07. Okt 2016 11:50

Hier der erzeugte Macro Code:

Code: Alles auswählen

    Selection.TypeText Text:="Test"  // Text eigegeben "Test"

    Selection.Style = ActiveDocument.Styles("Standard") // Standardstyle ausgewählt.

    With ActiveDocument.Styles("Standard").Font // aktuellen Style "Standard" ändern *** ich denke hier liegt der Schlüssel bei TXT Dokumenten.
        .Name = "Arial"
        .Size = 12
        .Bold = True
        .Italic = False
        .Underline = wdUnderlineNone
        .UnderlineColor = wdColorAutomatic
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .Color = wdColorAutomatic
        .Engrave = False
        .Superscript = False
        .Subscript = False
        .Scaling = 100
        .Kerning = 0
        .Animation = wdAnimationNone
        .Ligatures = wdLigaturesNone
        .NumberSpacing = wdNumberSpacingDefault
        .NumberForm = wdNumberFormDefault
        .StylisticSet = wdStylisticSetDefault
        .ContextualAlternates = 0
    End With
Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Fr, 07. Okt 2016 14:35

ich habe alle m.E. Varianten durchgespielt - kein Ergebnis. kann ich das Marco denn beim drucken aufrufen ? als Function
oder mit runshell ??
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Fr, 07. Okt 2016 14:48

nein das geht nur über das oWord Objekt.
Ich hatte irgendwo die Hilfe dazu ...

wenn das so stimmt (ich habs nicht probiert, aber du hast es so geschrieben):

oWord:Selection:PageSetup:Orientation := wdOrientLandscape

dann muss es so ählich aussehen:

oDoc - vermutlich das aktuelle Dokument, könnte also ActiveDocument (bzw. dessen Rückgabewert in Word) sein ?

Code: Alles auswählen

oDoc:Styles("Standard"):Font:Name := "Arial"
oDoc:Styles("Standard"):Font:Size := 12
oDoc:Styles("Standard"):Font:Bold := .f.

oWord:Selection:Style := oDoc.Styles("Standard")
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Fr, 07. Okt 2016 15:03

oder noch einfacher, ich habe die Entwicklertools eingeschaltet und in der Objekthirarchie folgendes Beispiel gefunden:

Code: Alles auswählen

Visual Basic für Applikationen 
Dim rngTemp As Range

Set rngTemp = ActiveDocument.Range(Start:=0, End:=0)
With rngTemp
    .InsertBefore "Company Report"
    .Font.Name = "Arial"
    .Font.Size = 24
    .InsertParagraphAfter
End With

ActiveDocument.PrintOut 
rngTemp ist also eine einfache Range (ganz am Anfang), du nimmst dort ja immer die Selection
Und ohne viel Aufwand wird direkt für diesen Bereich die Schriftart festgelegt, also erst gar nicht über Normal formatiert.
Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Mo, 24. Okt 2016 15:51

so nach meinem Urlaub wollte ich hier weitermachen.

aber beim 1. styles

Code: Alles auswählen

    oWord := CreateObject("Word.Application") 

   IF Empty( oWord ) 
     MsgBox( "Microsoft Word ist nicht installiert" ) 
     RETURN Nil
   ENDIF 

   oWord:visible   := .f.                               // Word unsichtbar! 
   cActivePrinter  := oWord:Activeprinter     // aktuellen Drucker feststellen 
   oWord:Activeprinter:= cDrucker               // Neuen Drucker setzen 
   oWord:documents:Open(cDoc)     
	If At("lker.lit",cdoc) >0
		oWord:Selection:PageSetup:Orientation:=wdOrientLandscape             
*		oWord:Selection:PageSetup:Worddialog:=wdDialogFontSubstitution ="8.Courier New"
*		oWord:Selection:PageSetup:Compatibility:=wdSubFontBySize="8.Courier New"

oDoc:Styles("Standard"):Font:Name := "Courier New"
oDoc:Styles("Standard"):Font:Size := 8
oDoc:Styles("Standard"):Font:Bold := .f.

oWord:Selection:Style := oDoc:Styles("Standard")
	Endif 

kommt diese Fehlermeldung word.ch ist eingebunden. weiß hier noch jemand Bescheid? wie ich hier die Schriftart Größe vorgeben kann.
ohne das dem user zu überlassen und Word zu starten und er macht das selber

Code: Alles auswählen

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\32Bit\Liefker.exe" Datum: 24.10.2016 15:46:31

Xbase++ Version     : Xbase++ (R) Version 1.90.331
Betriebssystem      : Windows  06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: U VALUE: NIL
          -> VALTYPE: C VALUE: Standard
oError:canDefault   : N
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Parameter hat falschen Typ
oError:filename     : 
oError:genCode      :          2
oError:operation    : Styles
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :       1025
oError:subSystem    : BASE
oError:thread       :          1
oError:tries        :          0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von DRUCKEN(37)
Aufgerufen von LISTEDRUCKEN(56)
Aufgerufen von (B)MAIN(41)
Aufgerufen von MAIN(56)
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Word Landscape

Beitrag von brandelh » Mo, 24. Okt 2016 16:08

versuche doch die Syntax von oben mit direkter Schrift:

Code: Alles auswählen

Set rngTemp = ActiveDocument.Range(Start:=0, End:=0)
With rngTemp
    .InsertBefore "Company Report"
    .Font.Name = "Arial"
    .Font.Size = 24
    .InsertParagraphAfter
End With
sollte etwa so aussehen:

Code: Alles auswählen

oRange := oWord:ActiveDocument:Range(Start:=0, End:=0) // Paramter bitte in Dokumentation nachsehen
oRange:Font:Name := "Arial"
oRange:Font:Size := 24
Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Word Landscape

Beitrag von Rolf Ramacher » Mo, 24. Okt 2016 16:38

es gibt keine Fehlermeldung, aber auch keine Änderung.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

flanelli
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 27
Registriert: Di, 11. Mai 2010 16:27

Re: Word Landscape

Beitrag von flanelli » Mo, 24. Okt 2016 22:19

Hallo Rolf,
der Lösungsansatz von Hubert mit dem Range-Objekt sollte jedenfalls klappen wenn du einen gültigen Bereich
definieren möchtest bzw. würdest bzw. kannst aber falls "Start" oder "End" sozusagen "out of range" ist dann klingelt der Postman twice :-)

Ich schreibe es mal ganz simpel etwas anders als Hubert

Code: Alles auswählen

oWord := CreateObject("Word.Application")
....
oDoc:= oWord:ActiveDocument
....
** ActiveDocument.Range(Start:=0, End:=0)
x1:=oDoc:Range(0, 100)    // 100 für End bedeutet 100 Zeichen
x1:Font:Name = "Courier New"
x1:Font:Size = 8
Wenn du nun nicht exakt die Anzahl der Zeichen im Dokument kennst dann wird entweder weniger Text als vorhanden
entsprechend behandelt oder du fliegst bei zu großen "End"-Wert eine Runde weil End ( z.B. willkürlich 100000 gesetzt )
eben "out of range" ist.

Daher wäre es in deinem Fall wohl besser du wählst gleich den ganzen Inhalt aus

Code: Alles auswählen

oWord := CreateObject("Word.Application")
oDoc:= oWord:ActiveDocument

oDoc:Content:Font:Name = "Courier New"
oDoc:Content:Font:Size = 8

oDoc:PrintOut(.T.)
...
Ich hoffe, ich habe dein Problem richtig verstanden uns mein Geschnipsel hilft dir weiter,

Gruß, Marcel
Ahoile aus dem Süden

Antworten