OLE zugriff auf Word
-
Hallo zusammen,
ich besitze den Turbo C++ builder von Borland. von diesem will ich auf word darauf zugreifen das funktionier auch fast.
Das Problem ist das er nicht zu den Textmarken springt und diese ausfüllt sonder alles in die erste zeile schreibt.
Kann mir einer Helfen damit das funktioniert
Vielen dank im Vorraus

Hier die CPP Datei
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "FormMain.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfrmMain *frmMain; //--------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- // Initialisierung des Word OLE-Servers //--------------------------------------------------------------------------- bool __fastcall TfrmMain::InitOleServer(Variant &vOLEWord) { vOLEWord = Unassigned; try { // vielleicht läuft Word ja bereits (wenn nicht, wird hier // eine Exception generiert - aber die ist ja behandelt :) vOLEWord = GetActiveOleObject("Word.Application"); return false; } catch(...) { try { // vielleicht läuft Word ja bereits... vOLEWord = CreateOleObject("Word.Application"); return true; } catch(Exception& e) { // Wahrscheinlich kein Word auf dem Rechner... Application->MessageBox(e.Message.c_str(),"OLE-Error",MB_ICONERROR); vOLEWord = Unassigned; } } return true; } //--------------------------------------------------------------------------- // Beenden des Word OLE-Servers //--------------------------------------------------------------------------- void __fastcall TfrmMain::TerminateOleServer(Variant &vOLEWord) { // Word OLE-Server beenden: if(!vOLEWord.IsEmpty()) { vOLEWord.OlePropertyGet("Application").OleProcedure("Quit"); vOLEWord = Unassigned; } } //--------------------------------------------------------------------------- // Word-Dokument erzeugen, ggf. speichern und/oder drucken //--------------------------------------------------------------------------- void __fastcall TfrmMain::CreateDocument(Variant &vOLEWord, AnsiString slTemplateFile, AnsiString slSaveFile, bool blPrint) { try { // falls Word-Fenster sichtbar sein soll, // muss folgende Zeile aktiviert werden: // vOLEWord.OlePropertySet("Visible", true); // Falls die Vorlagen-Datei nicht existiert, schimpfen und beenden: if(!FileExists(slTemplateFile)) { Application->MessageBox("Vorlagendatei nicht gefunden !", "Abbruch",MB_ICONERROR); return; } // Referenz auf die "Documents"-Eigenschaft besorgen Variant vDokuments = vOLEWord.OlePropertyGet("Documents"); // neues Dokument mit slTemplateFile als Dokumentenvorlage erzeugen: vDokuments.Exec(Procedure("Add") << slTemplateFile << 0); //-------------------------------------------------- // Formular-Felder ausfüllen //-------------------------------------------------- // Referenz auf die "Selection"-Eigenschaft besorgen Variant vSelection = vOLEWord.OlePropertyGet("Selection"); // Zu Textmarke "Empfaenger" gehen: vSelection.Exec(Procedure("GoTo") << (int)wdGoToBookmark << 0 << 0 << "Empfaenger"); // den Text aus dem Eingabefeld eintragen: vSelection.OleProcedure("TypeText",(VARIANT) ((Variant)editEmpfaenger->Text.c_str())); // Zu Textmarke "Anschrift" gehen: vSelection.Exec(Procedure("GoTo") << (int)wdGoToBookmark << 0 << 0 << "Anschrift"); // den Text aus dem Eingabefeld eintragen: vSelection.OleProcedure("TypeText",(VARIANT) ((Variant)editAnschrift->Text.c_str())); // Zu Textmarke "PLZ_Ort" gehen: vSelection.Exec(Procedure("GoTo") << (int)wdGoToBookmark << 0 << 0 << "PLZ_Ort"); // den Text aus dem Eingabefeld eintragen: vSelection.OleProcedure("TypeText",(VARIANT) ((Variant)editPLZ_Ort->Text.c_str())); // Zu Textmarke "Betreff" gehen: vSelection.Exec(Procedure("GoTo") << (int)wdGoToBookmark << 0 << 0 << "Betreff"); // den Text aus dem Eingabefeld eintragen: vSelection.OleProcedure("TypeText",(VARIANT) ((Variant)editBetreff->Text.c_str())); // Zu Textmarke "Anrede" gehen: vSelection.Exec(Procedure("GoTo") << (int)wdGoToBookmark << 0 << 0 << "Anrede"); // den Text aus dem Eingabefeld eintragen: vSelection.OleProcedure("TypeText",(VARIANT) ((Variant)editAnrede->Text.c_str())); // Zu Textmarke "Text" gehen: vSelection.Exec(Procedure("GoTo") << (int)wdGoToBookmark << 0 << 0 << "Text"); // den Text aus dem Eingabefeld eintragen: vSelection.OleProcedure("TypeText",(VARIANT) ((Variant)memoText->Lines->Text.c_str())); // Zu Textmarke "Ersteller" gehen: vSelection.Exec(Procedure("GoTo") << (int)wdGoToBookmark << 0 << 0 << "Ersteller"); // den Text aus dem Eingabefeld eintragen: vSelection.OleProcedure("TypeText",(VARIANT) ((Variant)editErsteller->Text.c_str())); // ggf. drucken: if(blPrint) vOLEWord.OlePropertyGet("Application").OleProcedure("PrintOut"); // ggf. speichern: Variant vActiveDocument = vOLEWord.OlePropertyGet("ActiveDocument"); if(slSaveFile != EmptyStr) vActiveDocument.Exec(Procedure("SaveAs") << slSaveFile << 0 << 0 << "" << 1 << "" << 0 << 0 << 0 << 0 << 0 ); // "gespeichert"-Flag in Word setzen, damit keine Nachfragen kommen vActiveDocument.OlePropertySet("Saved", true); // Datei schließen: vActiveDocument.Exec(Procedure("Close")); } catch(Exception& e) { Application->MessageBox( e.Message.c_str(),"OLE-Error",MB_ICONERROR); } } //--------------------------------------------------------------------------- // Dokument erzeugen und speichern //--------------------------------------------------------------------------- void __fastcall TfrmMain::btnCreateAndSaveDocClick(TObject *Sender) { // OLE-Server initialisieren, die Variable blWordStarted // wird auf true gesetzt falls Word nicht bereits aktiv war Variant vOLEWord; bool blWordStarted = InitOleServer(vOLEWord); // Falls die Initialisierung des OLE-Servers erfolgreich, // Dokument erzeugen und speichern: if(!vOLEWord.IsEmpty()) CreateDocument(vOLEWord, ExtractFilePath(ParamStr(0))+"vorlage.doc", ExtractFilePath(ParamStr(0))+"Brief.doc", false); // Word nur beenden, wenn es von uns zuvor gestartet wurde: if(blWordStarted) TerminateOleServer(vOLEWord); } //--------------------------------------------------------------------------- // Dokument erzeugen und drucken //--------------------------------------------------------------------------- void __fastcall TfrmMain::btnCreateAndPrintDocClick(TObject *Sender) { // OLE-Server initialisieren, die Variable blWordStarted // wird auf true gesetzt falls Word nicht bereits aktiv war Variant vOLEWord; bool blWordStarted = InitOleServer(vOLEWord); // Falls die Initialisierung des OLE-Servers erfolgreich, // Dokument erzeugen und drucken: if(!vOLEWord.IsEmpty()) CreateDocument(vOLEWord, ExtractFilePath(ParamStr(0))+"vorlage.doc", EmptyStr, true); // Word nur beenden, wenn es von uns zuvor gestartet wurde: if(blWordStarted) TerminateOleServer(vOLEWord); } //---------------------------------------------------------------------------Hier die H Datei
//--------------------------------------------------------------------------- #ifndef FormMainH #define FormMainH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ComObj.hpp> #include <utilcls.h> typedef enum WdGoToItem { wdGoToBookmark = 0xFFFFFFFF, wdGoToSection = 0, wdGoToPage = 1, wdGoToTable = 2, wdGoToLine = 3, wdGoToFootnote = 4, wdGoToEndnote = 5, wdGoToComment = 6, wdGoToField = 7, wdGoToGraphic = 8, wdGoToObject = 9, wdGoToEquation = 10, wdGoToHeading = 11, wdGoToPercent = 12, wdGoToSpellingError = 13, wdGoToGrammaticalError = 14, wdGoToProofreadingError = 15 } WdGoToItem; //--------------------------------------------------------------------------- class TfrmMain : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *btnCreateAndSaveDoc; TEdit *editAnrede; TLabel *Label1; TEdit *editEmpfaenger; TLabel *Label2; TEdit *editAnschrift; TLabel *Label3; TLabel *Label4; TEdit *editPLZ_Ort; TLabel *lblBetreff; TEdit *editBetreff; TMemo *memoText; TLabel *Label6; TLabel *Label7; TEdit *editErsteller; TButton *btnCreateAndPrintDoc; void __fastcall btnCreateAndSaveDocClick(TObject *Sender); void __fastcall btnCreateAndPrintDocClick(TObject *Sender); private: // Anwender-Deklarationen // Initialisierung des Word OLE-Servers bool __fastcall InitOleServer(Variant &vOLEWord); // Word-Dokument erzeugen, ggf. speichern und/oder drucken void __fastcall CreateDocument(Variant &vOLEWord,AnsiString slTemplateFile, AnsiString slSaveFile, bool blPrint); // Beenden des Word OLE-Servers void __fastcall TerminateOleServer(Variant &vOLEWord); public: // Anwender-Deklarationen __fastcall TfrmMain(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TfrmMain *frmMain; //--------------------------------------------------------------------------- #endif