win32com

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
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.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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:
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

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.
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
Zuletzt geändert von Milan am Sonntag 14. November 2004, 21:32, insgesamt 2-mal geändert.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

[code]#!/usr/bin/env python
import this[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Es geht :D . Danke euch beiden, sich durch den Dschungel von MS zu quälen ist einfach... bäh. :wink:
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

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 !
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Antworten