(Word-Datei öffnen und) Makro ausführen



  • Hallo,

    um obiges Problem zu lösen, habe ich mit u.a. mit dem Thema "MS-Word Dokument basierend auf einer Vorlage erzeugen, ausfüllen, speichern, drucken:" beschäftigt.
    http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/main/snip_cnt.htm
    Aber ich komme damit nicht weiter. Dummerweise sind (bei mir) die Office-Komponenten des Builders nicht kommentiert.
    Jemand ne Idee?

    Gruß
    Leo



  • "Ich komme nicht weiter" ist keine ausreichende Problembeschreibung.



  • Jansen schrieb:

    "Ich komme nicht weiter" ist keine ausreichende Problembeschreibung.

    Ich dachte, der Titel sei 'sprechend' genug.

    Mein Ziel ist, den reinen Text einer Word-Datei auszulesen, also ohne Formatierungen. Dazu habe ich im Netz den Hinweis gefunden, diese Arbeit von Word aus per Makro erledigen zu lassen. Dazu möchte ich eine Word-Datei (von C++ aus) öffnen und ein Makro ausführen.
    Sollte es einen einfacheren Weg geben, wäre das natürlich prima.

    Gruß
    Leo



  • Leo Freitag schrieb:

    den reinen Text einer Word-Datei aus[]lesen

    Das wäre z.B. eine aussagekräftige Überschrift gewesen.

    Dazu möchte ich eine Word-Datei (von C++ aus) öffnen und ein Makro ausführen.

    Das hört sich wenig sinnvoll an. Üblicherweise würde man das Makro direkt in C++ nachprogrammieren.



  • Jansen schrieb:

    Leo Freitag schrieb:

    den reinen Text einer Word-Datei aus[]lesen

    Das wäre z.B. eine aussagekräftige Überschrift gewesen.

    Dazu möchte ich eine Word-Datei (von C++ aus) öffnen und ein Makro ausführen.

    Das hört sich wenig sinnvoll an. Üblicherweise würde man das Makro direkt in C++ nachprogrammieren.

    Danke für die konzeptionelle Hilfe.
    Jetzt könnte ich noch ein wenig Anschub in Dingen 'Word-Datei öffnen' gebrauchen. Wie bereits erwähnt, gibt das Bytes&More-Beispiel das nicht her.

    Anbei schon mal das VBA-Makro

    Dim temp
    temp = ActiveDocument.Path & "/" & ActiveDocument.Name
    temp = Mid(temp, 1, Len(temp) - 3)
    ActiveDocument.SaveAs FileName:=temp & "txt", FileFormat:= _
        wdFormatTextLineBreaks, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False
    

    Erl. Das Dokument wird im Modus Ascii-Text mit Zeilenumbruch unter der Dateierweiterung .txt im selben Ordner gespeichert.

    Gruß
    Leo



  • Suchfunktion benutzen! Z.B.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-111207-and-highlight-is-word*.html

    Und dann z.B.

    Memo1->Lines->Text = WordApplication1->ActiveDocument->Content->get_Text();
    

    PS.
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • Hallo,

    danke für die Hilfe. Hier die fertige Lösung.
    Einzige Korrektur: Um das Dokument sichtbar zu machen, muss die Methode

    WordApplication1->set_Visible(true);
    

    angewandt werden.

    void __fastcall TForm3c2::btn_Word_lesenClick(TObject *Sender)
    {
        OleVariant Filename;
        if (OpenDialog1->Execute())
            Filename = OpenDialog1->FileName;
        else
            exit(1);
    
        WordApplication1->Connect();      //Verbindung zu Word
        WordApplication1->Documents->OpenOld(Filename, EmptyParam, EmptyParam,      
                     EmptyParam, EmptyParam, EmptyParam,
                     EmptyParam, EmptyParam, EmptyParam,
                     EmptyParam);
    
        WordDocument1->ConnectTo(WordApplication1->ActiveDocument);
    
        //WordApplication1->Visible = True;   //Word wird sichtbar}
        WordApplication1->set_Visible(true);
    
        // Text an Memo
        Memo1->Clear();
        Memo1->Lines->Text = WordApplication1->ActiveDocument->Content->get_Text();
    
        Sleep(3000); // um zu zeigen, dass Word wirklich sichtbar wird
    
        // Dokument schließen
        WordDocument1->Close();
        WordDocument1->Disconnect();
    
        // Anwendung schließen
        WordApplication1->Quit();
        WordApplication1->Disconnect();
    }
    //---------------------------------------------------------------------------
    

    Gruß
    Leo



  • Hallo,

    das Auslesen der Word-Dokumente funktioniert - wie oben beschrieben - einwandfrei. Wenn ein Dokument jedoch passwortgeschützt ist, und der Benutzer ein falsches Passwort eingibt, oder den Button Abbruch drückt, erscheinen folgende Fehlermeldungen:

    HRCHECK
    (this->OpenOld(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,
    PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format,
    (Word_2k::WordDocument**)&prop)) Error: 800A1520(-2146822880)@
    f:\programme\borland\cbuilder6\include\vcl\Word_2k.h/7231

    in Zeile

    WordApplication1->Documents->OpenOld(Filename, EmptyParam, EmptyParam,      //das Dokument öffnen
                         EmptyParam, EmptyParam, EmptyParam,
                         EmptyParam, EmptyParam, EmptyParam,
                         EmptyParam);
    

    und

    HRCHECK
    'this->get_Documents((Word_2k::Documents**)&prop)': Der RPC-Server ist nicht verfügbar.
    @f:\programme\borland\cbuilder6\include\vcl\Word_2k.h/5151

    in Zeile

    WordDocument1->ConnectTo(WordApplication1->ActiveDocument);
    sl->Text = WordApplication1->ActiveDocument->Content->get_Text();
    // Zuweisung zu StringList
    

    Unangenehm genug, dass überhaupt ein Fehler auftritt, aber sie lassen sich nicht einmal per try-catch abfangen. Hat jamand eine Idee?

    Gruß
    Leo



  • Hallo,

    hier nochmal die Bitte um Hilfe. Das Auslesen von Word-Dokumenten ist der zentrale Punkt meiner Anwendung, und ich stehe echt auf dem Schlauch, wenn es mir nicht gelingt, die 'falsche' oder fehlende Passworteingabe vernünftig abzufangen.

    Gruß
    Leo



  • ...dann spendier' der Funktion doch eine vernünftige Ausnahmebehandlung. Suche mal nach try .. catch()

    Edit: OMG, der Beitrag ist von 2006.
    🙄



  • Thread geschlossen wg. Spam-Bot-Angriff.
    Bei Nachfragebedarf bitte per Mail an die Moderatoren wenden.


Anmelden zum Antworten