Seite 1 von 1

win32com

Verfasst: Sonntag 14. November 2004, 14:53
von Milan
HI. Ich möchte mir ein kleines Automatisierungsscript schreiben, dass Officedateien (meist .doc) in pdf Dateien umwandelt. Normalerweise gehe ich dazu diesen Weg per Hand: Ich öffne das Dokument, lasse es von Office in eine Postscriptdatei drucken (spezieller Drucker Treiber) und wandle diese dann mit Ghostscript um. Ghostscript lässt sich von der Kommandozeile wunderbar bedienen, aber Office nicht. Deswegen bin ich auf der Suche, wie ich über die win32com Schnittstelle eine Datei drucken kann. das öffnen bekomme ich schon hin, auch dass dies im Hintergrund geschieht. Aber ich finde einfach keine Docu zu den Befehlen, da diese alle nur dynamisch zur Verfügung stehen. Wo kann ich mir anschauen, wie der Druckbefhel ausschaut, wie ich den Drucker einstelle und wie ich die Temporäre Datei angebe? Schnittstelle sind ja schön und gut, aber nur wenn sie leicht und durchsichtig sind. :?

thx Milan

Verfasst: Sonntag 14. November 2004, 16:08
von Gast
Du könntest eine VB6-Dll schreiben und mit win32com aufrufen. In VB6 gibts nämlich die Funktion SendKeys. Da könntest Du Strg+P usw. an M$ Office schicken.

Verfasst: Sonntag 14. November 2004, 16:11
von Milan
Anonymous hat geschrieben:Du könntest eine VB6-Dll schreiben
Hi. Hab ich leider nie gelernt und habs auch net vor - QBasic fand ich damals schon öde. :wink:

Verfasst: Sonntag 14. November 2004, 17:25
von Christopy
Da die COM Methoden ja eigentlich die gleichen sind, hier ein Link der sich mit Word, COM und Delphi beschäftig:
http://www.delphi-source.de/tipps/COM_OLE_DDE/

Allerdins ist die Frage wie man den Druckertreiber wechselt... evt. könntestet Du ein Word Makro ausführen.

Verfasst: Sonntag 14. November 2004, 17:43
von Christopy

Verfasst: Sonntag 14. November 2004, 17:54
von Milan
Danke, hat mir sehr geholfen. Ich glaube die Keywörter, die ich brauche, jetzt zu kennen. Werde ich nachher, wenn mit meinem anderem Kram hier fertig bin, mal testen und geb dann den Code frei. :D :D

Verfasst: Sonntag 14. November 2004, 19:05
von Milan

Code: Alles auswählen

import win32com.client
word = win32com.client.Dispatch('Word.Application')
word.Visible=0
doc=word.Documents.Open(filename)
doc.PrintOut(PrintToFile=1,PrToFileName="c:\\temp\\test1.ps",Copies=1,ActivePrinter=u"Acrobat Distiller on FILE:")
doc.Close()
word.Quit()
bringt bei mir das hier:

Code: Alles auswählen

raceback (most recent call last):
  File "<pyshell#14>", line 1, in -toplevel-
    f.PrintOut(PrintToFile=1,PrToFileName="c:\\temp\\test1.ps",Copies=1)
TypeError: PrintOut() got an unexpected keyword argument 'PrToFileName'
Wenn ich jetzt noch rauskriege, was es stattdessen sein, hab ich es geschafft.

Verfasst: Sonntag 14. November 2004, 19:26
von Dookie

Verfasst: Sonntag 14. November 2004, 20:56
von Milan
Es geht :D . Danke euch beiden, sich durch den Dschungel von MS zu quälen ist einfach... bäh. :wink:

Verfasst: Donnerstag 17. November 2005, 21:18
von Gunnar
Hmm ich habe auch ein problem mit Wordfiles, vielleicht kann ich hier einhaken :

Ich versuche eigentlich nur folgendes, nachdem ich merkte das ich es nicht mit einfachen Textfiles zu tun habe, sondern mit word-docs :

Code: Alles auswählen

import sys
import win32com.client

class Conform:

    def __init__(self):
        word = win32com.client.Dispatch('Word.Application')
        word.Visible=0 
        cutlist = word.Documents.Open(sys.argv[1])
        #cutlist = open (sys.argv[1], 'r')
        cutted_cutlist = cutlist.readlines()
        cutlist.close ()
        word.Quit()
        print cutted_cutlist



if __name__ == '__main__':
    rubbeldiekatz = Conform()
Ich will also einfach nur eine Liste aller Zeilen in dem Worddokument, geht aber nicht :(

Ich habe auch keine Ahnung, weil ich einfach mal mit dem Codesnippt von oben rumgespielt habe. Hat jemand eine Idee ?

Gruß,
Gunnar

P.S.
Im Zweifel muss das Worddokument eben in ein textfile kopiert werden..das geht auch per hand..diese Frage ist also mehr interessehalber !

Verfasst: Freitag 18. November 2005, 09:56
von N317V
Gunnar hat geschrieben:

Code: Alles auswählen

cutted_cutlist = cutlist.readlines()
Wie kommst Du denn darauf?

Code: Alles auswählen

cutted_cutlist=word.Documents[0].Content.Text