Word Automatisierung mit Visual Studio 2005/2008



  • Hallo,

    ich möchte gern eine kleinere Aufgabe mit Word Automatisierung lösen. Bis vor kurzem hab ich noch Visual Studio 6.0 verwendet. Dort erstellt man einfach mit dem Klassenassistenten eine Wrapper-Klasse aus der MSWORD9.OLB und kann diese dann benutzen.

    Nun bin ich auf Visual Studio 2008 umgestiegen. Ich gehe ähnlich vor wie unter VS 6.0, allerdings werden jetzt nicht mehr eine, sondern mehrere Wrapper-Klassen erstellt. Aber das ist nicht das Problem, sondern dass sich das ganze nicht kompilieren lässt. Ich bekomme ohne Ende Fehler in der MSWORD9.TLH, hier mal der Anfang:

    1>c:\projekte\visual c++ 9\tests\automatisierung\wordremotetest\wordautotest\debug\msword9.tlh(6835) : error C2059: Syntaxfehler: 'Konstante'
    1>c:\projekte\visual c++ 9\tests\automatisierung\wordremotetest\wordautotest\debug\msword9.tlh(15255) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Fonts'
    1>c:\projekte\visual c++ 9\tests\automatisierung\wordremotetest\wordautotest\debug\msword9.tlh(15255) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\projekte\visual c++ 9\tests\automatisierung\wordremotetest\wordautotest\debug\msword9.tlh(15255) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\projekte\visual c++ 9\tests\automatisierung\wordremotetest\wordautotest\debug\msword9.tlh(15308) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'GetFonts'
    1>c:\projekte\visual c++ 9\tests\automatisierung\wordremotetest\wordautotest\debug\msword9.tlh(15308) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\projekte\visual c++ 9\tests\automatisierung\wordremotetest\wordautotest\debug\msword9.tlh(15308) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

    Ich versuche nun rauszubekommen, was los ist. Dazu muss ich sagen, dass ich von der Office Automatisierung bzw. COM nicht wirklich Ahnung habe. Unter VS 6.0 habe ich es mit irgendwelchen Tutorials recht schnell ans Laufen bekommen, aber jetzt komm ich einfach nicht weiter.

    Ich frage mich, ob dieses Posting etwas mit meinem Problem zu tun hat?

    Kennt jemand vielleicht gute Bücher oder Weblinks zum Thema Office Automatisierung mit Visual C++ 2005/2008? Ich finde zu dem Thema einfach nichts. Liegt es vielleicht daran, dass man diese Programmiertechnik heute einfach nicht mehr verwendet? Wäre es etwas besser, auf C# umzusteigen?

    Tschüss,
    Riky



  • Kannst du mal den Sourcecode an den Stellen zeigen?

    Ansonsten kannst du auch die Wrapper Klassen benutzen, die du mit VS6.0 erstellt hast.



  • xxxxxxx schrieb:

    Kannst du mal den Sourcecode an den Stellen zeigen?

    Klar.

    Zeile 6835:

    HRESULT ExitWindows ( );
    

    Zeile 15255:

    WebPageFontsPtr Fonts;
    

    Zeile 15308:

    WebPageFontsPtr GetFonts ( );
    

    Zeile 15648:

    AssistantPtr Assistant;
    

    Und so weiter.

    Ansonsten kannst du auch die Wrapper Klassen benutzen, die du mit VS6.0 erstellt hast.

    Ja, das wäre dann eine Notlösung, wobei ich das ganze dann direkt ganz mit VS6.0 machen würde.

    Ich kann mir aber nicht vorstellen, dass es keine saubere Lösung mit VS2008 gibt. Das muss doch möglich sein. Hatte mich so gefreut, dass unsere Firma endlich, endlich auf die neue Version upgradet, und jetzt das... wie gesagt, ich wäre auch dankbar, wenn jemand ein Buch kennt, in dem das beschrieben wird. Oder einen Link. Ich finde einfach nichts zu dem Thema.

    Tschüss,
    Riky



  • Wordautom. mit c# ist sehr einfach. Da hast du in 5 Min ein Programm wo du z.B. Texte an bei einem Anker einfügen kannst.



  • Ich kann mir aber nicht vorstellen, dass es keine saubere Lösung mit VS2008 gibt

    Gibt es bestimmt.

    Ich hatte auch eine VS 6-Version von meinem Vorgänger "geerbt". Aber mit VS 2005 musste ich das dann auch neu machen -zumal sich zwischenzeitlich meine Office-Version geändert hatte. Als es lief, habe ich es nie wieder angerührt. Auf VS 2008 habe ich das Projekt nur konvertiert.

    Mir hatte man den Tipp gegeben, mir die Beschreibungen im Visual Basic Editor anzusehen. Mir hat es nicht geholfen.

    Ich hatte die seltsamsten Fehlermeldungen, wenn ich vergessen habe, die Zeilen

    #import "C:\\Programme\\Microsoft Office\\OFFICE11\\MSWORD.OLB" no_namespace
    

    auszukommentieren.
    Vielleicht musst Du auch noch einige Wrapper-Klassen mehr einbinden, weil sie sich gegenseitig bedingen?



  • Wordautom. mit c# ist sehr einfach. Da hast du in 5 Min ein Programm wo du z.B. Texte an bei einem Anker einfügen kannst

    Kann ich bestätigen, passte bei uns nur leider nicht in die "Umgebung".


  • Mod

    xxxxxxx schrieb:

    Kannst du mal den Sourcecode an den Stellen zeigen?

    Ansonsten kannst du auch die Wrapper Klassen benutzen, die du mit VS6.0 erstellt hast.

    Man kann auch MFC Wrapprer Klassen in VS-200x erzeugen.
    Einfach im Class-View -> Add -> Class -> MFC Class from Typelib



  • Man kann auch MFC Wrapprer Klassen in VS-200x erzeugen.

    Ich glaube, das hat er getan.

    Ich gehe ähnlich vor wie unter VS 6.0, allerdings werden jetzt nicht mehr eine, sondern mehrere Wrapper-Klassen erstellt.


  • Mod

    Es wurden immer mehrere Klassen erzegt. Für jedes Objekt eine...



  • Tester2 schrieb:

    Ich hatte die seltsamsten Fehlermeldungen, wenn ich vergessen habe, die Zeilen

    #import "C:\\Programme\\Microsoft Office\\OFFICE11\\MSWORD.OLB" no_namespace
    

    auszukommentieren.

    Ich habe diese Zeile jetzt in der generierten CApplication.h auskommentiert - und nun klappt es scheinbar...

    Versteh ich nicht. Wieso wird diese Zeile denn dann überhaupt generiert? Und wo wird jetzt stattdessen die msword.olb eingebunden? Irgendwo muss das ja passieren, ich hab doch ansonsten jetzt nur eine Header-Datei (die CApplication.h)... ?

    Aber jedenfalls Danke für den Tip, jetzt komm ich schon mal weiter... 🙂

    Martin Richter schrieb:

    Es wurden immer mehrere Klassen erzegt. Für jedes Objekt eine...

    Ja, richtig. Ich hab mich vertan, ich meinte, dass jetzt für jede Klasse eine Datei erzeugt wird, früher kamen alle Klassen in eine (fand ich besser).


  • Mod

    Ich habe diese MFC Wrapper nie gemocht. Der Weg über #import ist der Beste!
    Ich würde also eher daran gehen den #import möglich zu machen. Evtl. wird das Ganzenur durch ein paar defines oder Namenskonflikte ausgelöst.



  • Und wie geht das, mit #import und ohne Wrapper? Wo ist der Unterschied?

    Gibt es irgendwo im Netz eine Anleitung dazu?

    Dieses #import wurde ja von VS2008 in der Datei mit der Wrapperklasse generiert. Wozu auch immer.


  • Mod

    #import erzeugt doch je nach Einstellung entweder die entsprechenden Wrapper Klassen odr Interfaces.

    Irgendwie müssen die smybolischen Namen doch dem Compiler bekannt gemacht werden. Das passiert eben über #import.



  • Ich hab keine Ahnung, was #import macht. Mit Visual Studio habe ich Wrapper-Klassen aus der Type-Library von Word erstellt. In den h-Dateien zu diesen Klassen fand ich die #import-Anweisungen, die auf die Type-Library verweisen.

    Ich hab von dem Thema keinen Plan, aber das erschien mir nachvollziehbar, in der Type-Library sind halt irgendwie die Klassen drin, und VS generiert mir dazu eine schöne h-Datei, und über das #import wird die Library dann dem Projekt zugefügt (so hab ich mir das gedacht...).

    Aber es funktionierte nicht, und ich bekam hier den Tip, das #import auszukommentieren, was ich gemacht habe, und nun gehts, aber ich versteh nix mehr. Und jetzt sagst du, ich soll die Wrapper-Klassen weglassen und nur #import machen.

    Also da versteh ich gar nichts mehr 🙂


  • Mod

    Na dann empfehle ich Dir einfach mal was über COM- Typelibs und grundsätzlich IDispatch zu lesen...



  • Hallo, ich wollte rikyho mal was fragen, aber hier scheint es keine PN's zu geben, vielleicht kannst du mich mal kontaktieren, es geht um dein VS6 word autoamtion

    mindaffecter(a)gmx.de

    danke


Anmelden zum Antworten