Deutsch
Forum

Druckvorschau MS-Word

 

Normann
Strübli
Hallo,

ich habe gerade damit angefangen ein kleines Programm zu schreiben
welches Meßwerte in ein vorgegebenes Protokoll schreiben soll.
Da das protokoll etwas komplizierter Aussieht
(mit tabellen, Grafiken, Fußnoten etc.) habe ich mich entschlossen das Protokoll in MS-Word (2002) zu erstellen anstatt es Aufwendig irgendwie
mit Profan zu realisieren :roll:
Um die einzelnen Strings und Werte nun an die richtige position im
Dokument zu bekommen hat jedes Feld einen eindeutigen Namen -z.B: |1202. Die .doc-Datei wird nun mit Profan geöffnet und die Feldnamen mit den gewünschten Zeichenketten ersetzt - Voila! Klappt super
Jetzt aber zum Problem:

Da das Prüfprotokoll ein wichtiges Dokument ist möchte ich es vor
Änderungen/ Fälschung schützen. Die erste Maßnahme die die dafür
getroffen habe ist die Checksumme der geänderten .doc Datei zu ermitteln und mit auszudrucken. So kann wenn nötig festgestellt werden
ob etwas in dem Dokument geändert wurde. Allerdings bin ich mit der Lösung noch nicht ganz zufrieden.
Ist es also möglich in Word direkt die Druckvorschau anzuzeigen - oder noch besser das Dokument auszudrucken ohne Word laden zu müssen? evtl. via kommandozeilen-parameter? Habe leider im Netz und in der Word- hilfe nix dazu gefunden - aber vielleicht weiß hier ja zufällig jmd. etwas darüber.

gruß
Normann
 
26.01.2005  
 



Aus genau diesem Grunde empfehle ich dir [...] 

Dort machst Du Deine Vorlagen im Format .sdc - und eine shellexec print anweisung läßt das OOffice Drucken wie ein Baby - ohne lästige Nachfragen.

Suche mal hier in der Community nach binprint - glaube ich hatte schonmal ne Inc gebastelt dafür welche ich selbst Nutze um verschiedene Clients übers Netzwerk drucken lassen zu können - und alles im Nachhinein auch noch Nachvollziebar bleibt.

Salve, iF
 
26.01.2005  
 




Normann
Strübli
danke iF für die schnelle Antwort - werd mich mal wohl mal mit OpenOffice beschäftigen müssen aber mit Word werd ich trotzdem weitertüfteln.
Von wem war nochmal die Vorlage ein fremdes Programm im eigenen Profanfenster auszuführen- sozusagen einzufangen. Kann mich nur noch sehr dunkel daran erinnern...
Nebenbei find ich es toll wie Du die Community wieder aufgebaut hast, man fühlt sich schon wieder ganz wie Zuhause
 
26.01.2005  
 




Jörg
Sellmeyer
Hallo Normann,
Eigentlich müßtest Du mit ShellExec(Document.doc,Print,0) Word unsichtbar starten können um das Dokument direkt auszudrucken.
Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
26.01.2005  
 



@Norman: Danke

@Jörg: leider geht es so mit word nicht - da sonst vielleicht sogar der PrinterDialog nicht angezeigt würde.

Das Problem mit word ist halt einfach das vor dem Ausdruck ein PrinterDialog kommt - bei OO ist dies halt nicht der Fall. Und da viele Firmen eine Lizensverwaltung eingeführt haben - ist man mit OO auf der sicheren Seite.

Salve, iF
 
27.01.2005  
 




Normann
Strübli
Der Vorschlag von Jörg ist funktioniert aber -wenn Word auch nicht unsichtbar gestartet wird, so wird das Dokument an den Drucker gesandt und Word anschließend wieder geschlossen.
Abgesehen davon muß ich es zumindest für Word noch besser lösen - falls man mal nicht mit dem Standarddrucker drucken will - mal gucken.

gruß
Normann
 
27.01.2005  
 



Ach echt? Lol ich hatte es mit OfficeXP probiert und da kam immer der lästige PrinterDLG. Sag doch - welche Word-Version nutzt Du?

Salve, iF
 
28.01.2005  
 




Jörg
Sellmeyer
Hallo Normann,
Von Sebastian König gibts eine OleFile.prf. Sieht ziemlich klompiziert aus,
abervielleicht kannst Du was damit anfangen.
KompilierenMarkierenSeparieren
+-----------------------------------------------------------------------+
| olefile.prf - Dateien öffnen und schließen mit OLE                    |
| Autor: Sebastian König                                                |
| email: feedback@sekoenig.de                                           |
| Homepage: http://www.sekoenig.de                                      |
| Copyright ©2001 Sebastian König                                       |
|                                                                       |
| Dieser Quellcode zeigt, wie man mit OLE und Profan² ein Word-Dokument |
| zum Bearbeiten öffnet.                                                |
|                                                                       |
|                                                                       |
| WICHTIG: Dieser Quellcode funktioniert erst ab Profan 7.0 und setzt   |
|          voraus, dass Microsoft® Word installiert ist.                |
|                                                                       |
| TIP(P):  Diese Methode funktioniert nicht nur mit Word-Dokumenten.    |
|          Wenn man die Dateimaske zum Beispiel in *.bmp ändert, wird   |
|          automatisch Paint (oder ein anderes Zeichenprogramm)         |
|          geöffnet.                                                    |
|                                                                       |
+-----------------------------------------------------------------------+
---Prozeduren

proc Release

    parameters obj&
    declare vptr&
    let vptr& = @long(obj&,0)
    return Call(@long(vptr&,8),obj&)

endproc

+++
---Benötigte (COM/OLE)-API-Funktionen:
DEF OleInitialize(1) !"OLE32","OleInitialize"
DEF OleUninitialize(0) !"OLE32","OleUninitialize"
DEF IIDFromString(2) !"OLE32","IIDFromString"
DEF CoTaskMemAlloc(1) !"OLE32","CoTaskMemAlloc"
DEF CoTaskMemFree(1) !"OLE32","CoTaskMemFree"
DEF CreateILockBytesOnHGlobal(3) !"OLE32","CreateILockBytesOnHGlobal"
DEF StgCreateDocfileOnILockBytes(4) !"OLE32","StgCreateDocfileOnILockBytes"
DEF OleCreateFromFile(8) !"OLE32","OleCreateFromFile"
DEF MultiByteToWideChar(6) !"KERNEL32","MultiByteToWideChar"
DEF Sleep(1) !"KERNEL32","Sleep"
---Variablen deklarieren:
declare ILockBytes&,IStorage&,IOleClientSite&,IRichEditOle&,MSWord&,IUnknown&
declare vp_MSWord&,vp_RTFOle&
declare CLSID_MSWord&,IID_IOleObject&,IID_IOleClientSite&,IID_IUnknown&
declare clsid$,iid$,olestr&
declare file$,file&
declare FORMATETC#,RECT#,MSG#
declare count&
---Speicher allokieren:
let ILockBytes& = CoTaskMemAlloc(4)
let IStorage& = CoTaskMemAlloc(4)
let MSWord& = CoTaskMemAlloc(4)
let IID_IOleObject& = CoTaskMemAlloc(16)
let olestr& = CoTaskMemAlloc(256)
let file& = CoTaskMemAlloc(1024)
dim FORMATETC#,20
---Neues Fenster erstellen:
windowtitle "OLE mit Profan²"
window 100,100-640,480
---OLE initialisieren:
print "OleInitialize:",OleInitialize(0),"
"
---Storage-Objekt erstellen:
print "CreateILockBytesOnHGlobal:",CreateILockBytesOnHGlobal(0,1,Addr(ILockBytes&)),"
"
print "StgCreateDocfileOnILockBytes:",StgCreateDocfileOnILockBytes(ILockBytes&,$1012,0,Addr(IStorage&)),"
"
---MSWord-Objekt erstellen:
--IID für IOleObject aus String bilden:
let iid$ = "{00000112-0000-0000-C000-000000000046}"
MultiByteToWideChar(0,0,Addr(iid$),Len(iid$),olestr&,261),"
"
print "IIDFromString:",IIDFromString(olestr&,IID_IOleObject&),"
"
--Datei wählen
let file$ = LoadFile$("Word-Dokumente","*.doc")
MultiByteToWideChar(0,0,Addr(file$),Len(file$),file&,261),"
"
--FORMATETC# füllen...
long FORMATETC#,0  = 0
long FORMATETC#,4  = 0
long FORMATETC#,8  = 1 DVASPECT_CONTENT
long FORMATETC#,12 = 0
long FORMATETC#,16 = 0 TYMED_NULL
--Objekt erstellen:
print "OleCreateFromFile:",OleCreateFromFile(0,file&,IID_IOleObject&,0,FORMATETC#,0,IStorage&,Addr(MSWord&)),"
"
--vptr ermitteln:
let vp_MSWord& = @long(MSWord&,0)
MessageBox("Die Datei wird nun geöffnet und in ca. 5 Sekunden
automatisch wieder geschlossen.","Meldung",64)
---Objekt zum Bearbeiten öffnen:
print "MSWord&->DoVerb:",Call(@long(vp_MSWord&,44),MSWord&,-1,0,0,0,%hwnd,0)
---5 Sekunden warten, ohne den Prozess zu blockieren:
let count& = @add(&GetTickCount,5000)

while @lt(&GetTickCount,count&)

    Sleep(0)

wend

---Objekt wieder schließen:
print "MSWord&->Close:",Call(@long(vp_MSWord&,24),MSWord&,0)
print " "
print "> Taste oder Mausklick zum Beenden! <"
waitinput
---Aufräumarbeiten:
Release MSWord&
Release IStorage&
Release ILockBytes&
CoTaskMemFree(ILockBytes&)
CoTaskMemFree(IStorage&)
CoTaskMemFree(MSWord&)
CoTaskMemFree(CLSID_MSWord&)
CoTaskMemFree(IID_IOleObject&)
CoTaskMemFree(olestr&)
dispose FORMATETC#
OleUninitialize()
---Ende:
end

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
28.01.2005  
 




Normann
Strübli
[quote:efc5161f7d]welche Word-Version nutzt Du?[/quote:efc5161f7d]
hab gar kein Word
Kann das nur im Büro testen und da ist office Xp installiert, hmm...

Das Beispiel von Sebastian muß ich erst noch aufarbeiten -oder besser gesagt verstehen, stürzt auch leider mit einer Exeption EAccessVioaltion ab.
 
28.01.2005  
 




CB
Hi, Normann!

Meintest Du folgenden Link?

[...] 

Ich bin mir nicht ganz sicher, ob es das ist, was Du erreichen willst, aber vielleicht hilft Dir folgendes weiter:

Ich habe Dir ein kleines Word-Makro gebastelt (Ver 97, lauffähig müßte es auf jeden Fall sein bis incl. Word XP - höher hab ich nicht )
Was diesem Makro noch fehlt, ist die Abfrage, ob der Ausdruck schon fertig ist, weil sich Word sonst möglicherweise beschwert, daß es beendet werden soll, wos doch mit dem Drucken noch nicht fertig ist!

NewMakros.txt umbenennen in *.bas.
VisualBasic-Editor öffnen - Datei importieren - Link zur .bas - Editor verlassen - speichern (nicht vergessen!) - testen mit irgendeinem doc.
Nächster Schritt: Du erstellst Dir eine Vorlage (SinnvollerName.dot) und stellst dieses Makro dorthinein (Makros - organisieren - kopieren)

Nach dem Schema aus meinem Link kannst Du dann aus Deinem Profan-Programm heraus Word starten - einen Makro automatisch ausführen lassen (DruckenStdBeenden) und Word wird automatisch wieder geschlossen (Application.Quit machts möglich).
Noch ein Tip: (nicht ausprobiert): WinExec(Wait) kannst Du als Parameter den Abbildungsmodus übergeben - vielleicht druckt Word auch minimiert (Modus 2)?

Es gibt noch eine Möglichkeit: schau mal unter den Units im Forum nach:
Michael Dell hat da eine Deco.inc veröffentlicht zum Codieren und Decodieren - vielleicht kannst Dus brauchen (bevor Du was an Word schickst..).

Solltest Du Probleme haben mit meinem Beispielcode - ich bin (fast) jeden Tag online...

Christian

1 kB
Hochgeladen:28.01.2005
Ladeanzahl77
Herunterladen
 
XProfan 8/9.1, Win XP, AMD 64/3200
28.01.2005  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.109 Betrachtungen

Unbenanntvor 0 min.
Torben Nissen27.01.2021
Normann Strübli23.10.2020
Stephan Sonneborn21.07.2019
Georg Teles08.07.2019
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie