Seite 1 von 2

Word Landscape

Verfasst: Mi, 05. Okt 2016 9:00
von Rolf Ramacher
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.

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 9:06
von brandelh
Hast du mal eine Macroaufzeichnung probiert ?

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 9:15
von brandelh

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...

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 9:27
von Herbert
Das Dokument ist doch bereits im richtigen Format bestehend? Das wird doch übernommen. Oder irre ich da?

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 9:32
von Rolf Ramacher
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

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 9:33
von brandelh
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.

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 9:34
von brandelh
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 ...

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 10:33
von Rolf Ramacher
die word.ch habe ich nicht.

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

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 10:49
von brandelh
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:
//////////////////////////////////////////////////////////////////////

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 11:10
von brandelh
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

Re: Word Landscape

Verfasst: Mi, 05. Okt 2016 11:12
von Rolf Ramacher
danke hubert

werde es versuchen, ob es klappt

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 9:18
von Rolf Ramacher
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 ?

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 10:20
von brandelh
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.

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 11:23
von Rolf Ramacher
Hi Hubert,

Code: Alles auswählen

		oWord:Selection:PageSetup:Orientation:=wdOrientLandscape             
das geht

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 11:25
von brandelh
Hi,

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

Re: Word Landscape

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

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 

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 11:44
von brandelh

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 !

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 11:50
von brandelh
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

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 14:35
von Rolf Ramacher
ich habe alle m.E. Varianten durchgespielt - kein Ergebnis. kann ich das Marco denn beim drucken aufrufen ? als Function
oder mit runshell ??

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 14:48
von brandelh
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")

Re: Word Landscape

Verfasst: Fr, 07. Okt 2016 15:03
von brandelh
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.

Re: Word Landscape

Verfasst: Mo, 24. Okt 2016 15:51
von Rolf Ramacher
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)

Re: Word Landscape

Verfasst: Mo, 24. Okt 2016 16:08
von brandelh
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

Re: Word Landscape

Verfasst: Mo, 24. Okt 2016 16:38
von Rolf Ramacher
es gibt keine Fehlermeldung, aber auch keine Änderung.

Re: Word Landscape

Verfasst: Mo, 24. Okt 2016 22:19
von flanelli
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