Drucken über Word

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

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

Drucken über Word

Beitrag von Rolf Ramacher »

Hallo zusammen,

folgendes Problem:

ich drucke über XbpPrintDialog() eine RTF-Datei über Word. Ich geben dem Anwender über :pageRange() die Möglichkeit die
zu druckende Seitenzahl anzugeben. Aber wie bekommt ich beim Word-Ausdruck das hin ?

Hat jemand oder gibt es eine Auflistung der Active-X- Befehle ???

so sieht der Ausdruck aus:

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "Inkey.ch"
#include "xbpdev.ch"

#pragma Library( "XppUI2.lib" ) 
#pragma library( "ascom10.lib" ) 

Function Drucken( cDoc, cDrucker,oDlg) 
Local cActivePrinter 
Local oWord 
Local oDoc 

    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)                  
   oDoc       := oWord:ActiveDocument 

	If AT("filbestandliste.rtf",cDoc) > 0
			
     oDlg:PrintRange:=XBPPDLG_PRINT_PAGERANGE
	EndIf
    // word suchen seitendruck
   oDoc:PrintOut(.f.)                                  // .T.= Druck im Hintergrund 
   oWord:Activeprinter:= cActivePrinter       // alten Drucker setzen 
   oDoc:close() 
   oWord:Quit() 
   oWord:destroy() 
   oWord := NIL 
Return ( NIL )
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Hallo Rolf,
ist es das was du suchst?

Code: Alles auswählen

 
// Optionales Ausgeben auf dem Standarddrucker
// PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType,PrintToFile,Collate,FileName,ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight)

         IF(ValType(lPrint)=="L" .AND. lPrint)
            oDoc:PrintOut(lBackground,NIL,NIL,NIL,NIL,NIL,NIL,nCopies)           // Docudrucken
         ENDIF
Das ist aber nur für die Copie, aber vielleicht mit Pages kann es gehen

Gruss Thomas
Zuletzt geändert von Muecke am Mi, 11. Mär 2009 14:05, insgesamt 1-mal geändert.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von brandelh »

Hi,

die ActiveX Befehle hängen von dem ab, was das Control zur Verfügung stellt.
Bei Word und Excel kann man die VBA Hilfe (so heist das) nachinstallieren ... da gab es schon mal einen Thread, seither habe ich die auch ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von brandelh »

Hier steht weiter unten wie man die nachinstalliert, falls sie nicht vorhanden sind:

http://www.xbaseforum.de/viewtopic.php? ... lfe#p23634

bei mir liegen die im Verzeichnis c:\programme\microsoft office\office11\1031\ ...

Word: VBAWD10.CHM
Excel: VBAXL10.CHM
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hi Thomas,

wenn ich das bei Pages als Array eintrage erhalte ich eine Typkonflikt-Fehlermeldung. So sieht der code aus

Code: Alles auswählen

[code]
aSeite:=oDlg:pageRangeSelected
		oDoc:PrintOut(.f.,NIL,NIL,NIL,NIL,NIL,NIL,1,aSeite) 

aSeite liefert schon die richtigen Werte

Das ist die Fehlermeldung
 
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\32bit\FilBestand.exe" Datum: 12.03.2009 15:01:41

Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 2
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: PrintOut
-> VALTYPE: L VALUE: .F.
-> VALTYPE: U VALUE: NIL
-> VALTYPE: U VALUE: NIL
-> VALTYPE: U VALUE: NIL
-> VALTYPE: U VALUE: NIL
-> VALTYPE: U VALUE: NIL
-> VALTYPE: U VALUE: NIL
-> VALTYPE: N VALUE: 1
-> VALTYPE: A VALUE: {90, 92}
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Typkonflikt.
Parameter hat falschen Typ
oError:filename : NIL
oError:genCode : NIL
oError:operation : PrintOut
oError:osCode : -2147352571
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 1
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from DRUCKEN(31)
Called from LISTEDRUCKEN(36)
Called from (B)MAIN(48)
Called from MAIN(62)
[/code]

Ich habe es auch versucht als aSeite[2] - gleiche Meldung - Auch habe ich mal versucht bei pageTyp das Array anzugeben in den
diversen Versionen.

"a" oder {} oder "{}'" - es erscheint immer der gleiche Fehler.
Wer hat denn hier den entscheidenden Tipp.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Hallo Rolf,

und so ?

Code: Alles auswählen

oDoc:PrintOut(.f.,NIL,NIL,NIL,3,6,NIL,1,1)
So sollte das Ganze 1 mal gedruckt werden von Seite 3-6.
PrintOut([Background], [Append], [Range], [OutputFileName], [From], [To], [Item], [Copies], [Pages], [PageType], [PrintToFile], [Collate], [ActivePrinterMacGX], [ManualDuplexPrint], [PrintZoomColumn], [PrintZoomRow], [PrintZoomPaperWidth], [PrintZoomPaperHeight])
Gruss Thomas
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hi thomas,

leider erhalten ich immer noch den gleichen Fehler.

Code: Alles auswählen

		aSeite:=oDlg:pageRangeSelected
		nVon:=aSeite[1]
		nBis:=aSeite[2]
		oDoc:PrintOut(.f.,NIL,NIL,NIL,nVon,nBis,NIL,1,1)
InVon und nBis sind als Lokal numerisch definiert.
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: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

@ Hubert

die Datei vbawd10.chm ist diese auf der Word-CD drauf und kann man diese so kopieren ?? - Ich habe bei dem Kunden geprüft
bei den Systemeinstellungen /Verwaltung/Dienst - der RPC ist gestartet - und trotzdem erhält er die Fehlermeldung

RPC-Server nicht gefunden - bei oWord:visible := .f

???? Nur bei diesem Kunden
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Rolf,

Code: Alles auswählen

 oDoc:PrintOut(lBackground,NIL,wdPrintFromTo,NIL,"2","4",NIL,nCopies) 
Du musst den Range zuerst angeben.So sollte es funktionieren.

Gruss Thomas
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von brandelh »

Rolf Ramacher hat geschrieben:@ Hubert

die Datei vbawd10.chm ist diese auf der Word-CD drauf und kann man diese so kopieren ??
ich vermute, dass die auf der CD gepackt ist. Bei benutzerdefinierter Installation kann man ganz irgendwo VBA Hilfen aktivieren ...
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hi Thomas,

was muß ich denn bei Range übergeben ? Array, numerisch, String ? - was muß drinstehen ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Rolf,
Nimm den Code mal so,

Code: Alles auswählen

cFrom := "2"
cTo := "4"
oDoc:PrintOut(lBackground,NIL,wdPrintFromTo,NIL,cFrom,cTo,NIL,nCopies) 
Gruss Thomas
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hi thomas,

was muß denn in der Variablen wdPrintFromTo - drinstehen - und als welchen Typ ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Rolf,
Ah ich bin....

Code: Alles auswählen

#define wdPrintFromTo 3 
Gruss Thomas
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hi Thomas,

klappt leider auch nicht. ich erhalte immer noch die Meldung Typ-Fehler.

Code: Alles auswählen

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\32bit\FilBestand.exe" Datum: 13.03.2009 18:02:01

Xbase++ Version     : Xbase++ (R) Version 1.90.331
Betriebssystem      : Windows XP 05.01 Build 02600 Service Pack 2
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: C VALUE: PrintOut
          -> VALTYPE: L VALUE: .F.
          -> VALTYPE: U VALUE: NIL
          -> VALTYPE: N VALUE: 3
          -> VALTYPE: U VALUE: NIL
          -> VALTYPE: C VALUE: 
          -> VALTYPE: N VALUE: 92
          -> VALTYPE: U VALUE: NIL
          -> VALTYPE: N VALUE: 1
oError:canDefault   : J
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Typkonflikt.
Parameter hat falschen Typ
oError:filename     : NIL
oError:genCode      : NIL
oError:operation    : PrintOut
oError:osCode       :          -2147352571
oError:severity     :          2
oError:subCode      :       6500
oError:subSystem    : Automation
oError:thread       :          1
oError:tries        : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from DRUCKEN(34)
Called from LISTEDRUCKEN(36)
Called from (B)MAIN(48)
Called from MAIN(62)
so sieht der Aufruf aus:

Code: Alles auswählen

		oDoc:PrintOut(.f.,Nil,wdPrintFromTo,Nil,cVon,cBis,Nil,1)
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Jan »

Rolf,

ich misch mich mal ein. Ohne von der Materie selber viel Ahnung zu haben :?

Aber Parameter 5 und 6 sollen doch wohl "C" sein. In dem Fehlerprotokoll ist 5 leer und 6 "N". Kann daß das Problem sein?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hi Jan,

habe ich total übersehen. Ich erhalte jetzt keinen Fehler mehr, aber es werden immer noch alle Seiten an den Drucker übergeben -

!!! ???
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Rolf,

mit diesem Code geht das bei mir

Code: Alles auswählen

oWord := CreateObject("Word.Application") // Erzeugen einer ActiveX-Komponente
         *
         // Oeffnen eines Word-Dokuments um zu Drucken
         oWord:documents:open( cDoc )
         oDoc := oWord:ActiveDocument
         oWord:visible := .F.
         *
         IF ! empty( cPrinter )
              cOldPrinter := oWord:Activeprinter                        // Printer auswahl
              oWord:Activeprinter := cPrinter
              lPrint:= .T.
         ENDIF
         // Optionales Ausgeben auf dem Standarddrucker
        // PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight)

         IF(ValType(lPrint)=="L" .AND. lPrint)
            // Um Seiten zu drucken von 2-4 muss der Range mit  wdPrintFromTo=3 angegeben werden.
            // oDoc:PrintOut(lBackground,NIL,wdPrintFromTo,NIL,"2","4",NIL,nCopies)
            oDoc:PrintOut(lBackground,NIL,wdPrintFromTo,NIL,NIL,NIL,NIL,nCopies)           // Docudrucken
         ENDIF
Gruss Thomas
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Rolf,
was ich noch gesehen habe

Code: Alles auswählen

#include "activex.ch"
wo ist das bei dir?

Gruss Thomas
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hallo Thomas,

den include hatte ich nicht drin - aber jetzt . klappt trotzdem nicht. Was verbirgt sich denn hinter

wdPrintFromTo

muß für andere Seiten von bis - etwas anderes stehen als 3 ?

Der code sieht bei mir genauso aus.

Irgendwie verstehe ich das nicht !!!!???
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Rolf,

ich kann bei mir auch eine Local Variabel erzeugen und es geht auch.
LOCAL wdPrintFromTo:=3
MAl was anderes.Mach mal ein Word docu auf und lege diese parameter mit zum Drucken.
Was geht jetzt?

Gruss Thomas
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Rolf Ramacher »

Hi Thomas,

ich habe ja Word offen - das gleiche - er druckt immer alle Seiten.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Rolf,
Ich weiss jetzt leider auch nicht mehr weiter.Nimm aber zum Schluss mal das von Alaska D:\alaska\XPPW32\SOURCE\samples\activex
und druck das mal mit den parameter.Was ist jetzt?


Gruss Thomas
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Drucken über Word

Beitrag von AUGE_OHR »

hi,
Rolf Ramacher hat geschrieben:

Code: Alles auswählen

Function Drucken( cDoc, cDrucker,oDlg) 
Local cActivePrinter 
   cActivePrinter  := oWord:Activeprinter     // aktuellen Drucker feststellen 
   oWord:Activeprinter:= cDrucker               // Neuen Drucker setzen 
   oWord:Activeprinter:= cActivePrinter       // alten Drucker setzen 
a.) ich gehe mal davon aus das du es "sonst irgendwie" auf "dem" Drucker hin bekommst ?
b.) übernimm doch mal den Code von Thomas

Code: Alles auswählen

IF ! empty( cPrinter )
    cOldPrinter := oWord:Activeprinter                        // Printer auswahl
    oWord:Activeprinter := cPrinter
    lPrint:= .T.
ENDIF
c.) c:\Alaska\XPPW32\source\samples\solution\PConfig\PCONFIG.EXE ausprobiert ?
d.) wie Martin im anderen Thread schon sagte, das mit "W95" deutet auf eine "Kompatibilität"
Einstellung die NICHT sein sollte !
gruss by OHR
Jimmy
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Drucken über Word

Beitrag von Muecke »

Was ich mir nicht sicher bin, aber ein Versuch kan ja nichts schaden.

Code: Alles auswählen

#include "XbpDev.ch" 
Gruss Thomas
Antworten