[Python-de] MSWord-Automation mit python 2.1 -- Fehler mit Text-Selection() und Umlauten

Janos BEKESI jbekesi at meta-ware.at
Wed Dec 19 09:29:38 EST 2001


Hi all,

falls es jemanden interessiert: 
beim Arbeiten mit M$ Word 97 und win32com (von Hammond) ist mir 
folgendes aufgefallen:

die Funktion str(WordApp.Selection()) [ WordApp=die MSWord-
Instanz, die vom script erzeugt/verwendet wird; Selection= 
gewählter Text ] funktioniert nicht bei Umlauten (ASCII > 128).

Eine (provisorische) Lösung dafür hab ich aber gefunden:

Voraussetzung dafür ist, daß es eine Datei gibt, die mit dem 
COM make_py-utility (z.b. in pythonwin) erzeugt wurde (die Type 
Library "Microsoft Word 8.0 Object Library" -- steht auch im 
Header der Datei) und im Verzeichnis win32com/gen_py liegt (mit 
einer ellenlangen ID als Namen).

In dieser Datei muss man ca. ab Zeile 9162 folgendes einfügen:

# ----- original code: ----------------------------
# Default property for this class is 'Text'
def __call__(self):
    return apply(self._ApplyTypes_, (0, 2, (8, 0), (), "Text",
         None) )
# str(ob) and int(ob) will use __call__
def __str__(self, *args):
    try:
        return str(apply( self.__call__, args))
    except pythoncom.com_error:
	  return repr(self)
# ----- einzufügen: -------------------------------
    except UnicodeError:
        import codecs
        return codecs.latin_1_encode(apply(self.__call__, args),
            'replace')[0]
# ------ end code ---------------------------------

Bei dieser Notlösung werden allerdings osteuropäische etc. 
Zeichen, die nicht im latin-1 Zeichensatz enthalten sind, durch 
ein "?" ersetzt.

Alternativ könnte man sich auch utf-8 zurückgeben lassen, dann 
heißt der einzufügende Code:

# ----- einzufügen: -------------------------------
    except UnicodeError:
        import codecs
        return codecs.utf_8_encode(apply(self.__call__, 
            args))[0]
# ------ end code ---------------------------------

Wie man das aber weiterverarbeitet, weiß ich selber noch nicht.

bye,

J.






-- 
dr. janos bekesi (www.meta-ware.at)
A-1150, markgraf-ruediger-strasse 6
Tel. +43 1 548 2788
Austria        Fax  +43 1 548 1595




More information about the Python-de mailing list