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

Josef Cihal josef.cihal at irm.at
Wed Jan 2 18:53:59 EST 2002


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).


>Hi Janos,
>ich koennt eDir vielleicht mit dem MSWord helfen...
>Kannst Du mir schreiben , wozu Du das brauchst (ein konkretes Beispiel).
>Ich habe auch Probleme mit Unmläurten in Word...
>Hat die Lösung, die Du beschrieben hast, etwas damit zu tun???

>DAnke fuer die Antwort



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

_______________________________________________
Python-de maillist  -  Python-de at starship.python.net
http://starship.python.net/mailman/listinfo/python-de




More information about the Python-de mailing list