Datei Inhalt in *.doc Dokument ersetzen

r00r

Grünschnabel
Hallo,,

ich bin ein absoluter Anfänger. Leider habe ich im grpßen weiten WWW keinerlei Informationen gefunden die mir weiterhelfen.

Ich arbeite in einem Büro wo wir diverse Ordner haben.
In einem Ordner befinden sich ca. 30 Dokumente. Die müssten alle manuell geöffnet werden um z.B. eine Protokoll-ID zu änden.

Diese ID kommt ca. 15 mal in einem Dokument vor. Weiterhin sind noch andere Angaben zu ändern.

Nun bin ich auf der Suche nach einem Quellcode der mir ermöglicht, den Zielordner mit den Dokumenten festzulegen. Im Tool selbst sollte dann 2 - 3 Textboxen (Kein Textfeld, da auch mal ein längerer Satz geändert werden muss) haben wo ich quasi meine Daten eingeben Kann

Textbox1: zu ersetzender Text
Textbox2: neuer Text

Das Progrämmchen sollte dann alle *.doc Dateien automatisch öffnen und nach die angegebenen Wörter ersetezn, daß Dokument speichern und schließen.

Auf die schnelle das Programmieren so zu lernen ist ernorm, bin aber nicht abgeneigt.
Ich würde mich über eine kleine Hilfe freuen, das ganze würde meine Arbeit enorm erleichtern. So erspare ich mir 2-3 Stunden sinnloses ersetzen von Zeilen.

Ich bedanke mich vielmals.

Grüße
Patrick
 
Also du wirst mehr als 2-3 stunden brauchen um das Programm zu schreiben, bzw, das nötige zu lernen.

Ich gehe davon aus, dass du die Grundlagen schon kannst, oder selber findest.
Für die GUI (Graphische Oberfläche) würde ich dir wxWidgets empfehlen, in Kombination mit wxSmith (in der IDE Code::Blocks integriert)

Das Problem ist, dass .doc Dateien nicht wie ne txt Datei zu lesen sind, du müsstest ein anderes Programm benutzen um darauf zuzugreifen.
Man könnte ein Com-Object benutzen, um so Word zugriff zu bekommen. Allerdings ist das ziemlich schwer, ich komme damit leider auch nicht klar :(

Als alternative, mit der das sehr viel einfacher wäre, und was auch üblicher für deine Zwecke ist, ist AutoIt. Das ist eine Scriptsprache, die ziemlich einfach zu lernen und anzuwenden ist, und das Manipulieren von Windows, und das steuern von anderen Programmen ermöglicht.

Wenn du schon angefangen hast C++ zu lernen, kannst du natürlich auch damit weiter machen. C++ ist eine tolle Programmiersprache, mit quasi unendlich Möglichkeiten, dafür allerdings etwas komplizierter, und schwerer zu lernen.

Gruß Ryu
 
Grundkentnisse sind sehr wenig vorhanden. Da ich nie so den richtigen bedarf gehabt habe.

Habe nun etwas in Makro gemacht, aber das kann ich immer nur für einzelne Zeilen verwenden und hat mit autom. Ablauf nichts zu tun.
 
Hallo,

welche Entwicklungsumgebung benutzt du? Ich würde dir empfehlen die MFC zu benutzen, damit kannst du einfach eine Oberfläche basteln, die für deinen Zweck mehr als ausreichend ist.

Weiters müsstest du Word über COM ansprechen. Dazu findest du in der MSDN viele Informationen - ist auch nicht schwer.

Zum Durchsuchen von Ordnern gibts ne Menge Sourcecode im Netz.
 
Hallo,

kein Problem. Ich benutze MS Visual Studio 2008. Zuerst musst du die Automation Klassen erzeugen.

Mit der rechten Maustaste auf dein Projekt klicken und Add-Class auswählen. Wenn du die MFC benutzt, wähle "MFC Class from Typelib". Dort im Dropdown Menü "Microsoft Word Object 12 Object Library" auswählen. Dieser Eintrag ist immer ein bisschen unterschiedlich - je nach installierter Office Version. Am Besten übernimmst du alle Eintrage von Interfaces nach Generated Classes. Finish klicken und die Klassen werden erstellt.

Nun folgenden Sourcecode einfügen:

Code:
HRESULT hr = NOERROR;
CLSID clsid;
_Application wordApp;
IUnknown *pUnk = NULL;

hr = ::CLSIDFromString(OLESTR("Word.Application"),&clsid);
if (FAILED(hr))
{
   //Fehlerbehandlung
}

hr = ::CoCreateInstance(clsid,NULL,CLSCTX_SERVER,IID_IUnknown, (void**)&pUnk);
if (FAILED(hr))
{
   //Fehlerbehandlung
}

hr = pUnk->QueryInterface(IID_IDispatch,(void**)&wordApp.m_lpDispatch);
if (FAILED(hr))
{
   //Fehlerbehandlung
}

//mit wordApp kann nun Word gesteuert werden - z.B.: Word sichtbar setzen 
wordApp.SetVisible(TRUE);

//word unsichtbar
wordApp.SetVisible(FALSE);

//usw

//Am Ende noch pUnk wieder freigeben
if (pUnk)
   pUnk->Release();

Möchtest du nun ein Word Dokument öffnen, müsstest du eine Instanz der Documents Klasse erstellen und dir einen Pointer darauf mittels GetDocuments holen. Z.B.:

Code:
Documents wordDocs;
wordDocs = wordApp.GetDocuments();
wordDocs.Open(...)

Das Objektmodell lässt sich in der MSDN finden, Beschreibungen der Funktionen und Parameter ebenfalls.

Ich kann das Beispiel gerade nicht ausprobieren, sollte aber funktionieren. Wenn sich ein Fehler eingeschlichen hat, bitte Bescheid geben.
 
So weit war ich in Code::Blocks mit dem WebBrowser2 auch schon mal, aber das Objekt weigert sich ein navigate oder sowas zu machen.
Was ist das eigentlich mit dem pUnk, das habe ich kein stück verstanden.
 
Wegen IUnknown, hier kann dir die MSDN Seite helfen:

http://msdn.microsoft.com/en-us/library/ms680509(VS.85).aspx - dort steht eigentlich alles was du wissen musst.

Was ich noch vergessen habe, bevor man auf COM Komponenten zugreift muss
Code:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
aufgerufen werden. Hierbei ist der zweite Parameter zu beachten
MSDN: http://msdn.microsoft.com/en-us/library/ms695279(VS.85).aspx

Wenn alle COM Aufrufe durchgeführt wurden, muss noch
Code:
CoUninitialize();
aufgerufen werden.
 
Zurück