Word IDispatch Wörter suchen und ersetzen



  • Hallo

    ich habe eine Anwendung erstellt, die mittel IDispatch Word steurt. Dabei möchte ich vor allem in Vorlagen bestimmte Wörter suchen und ersetzen.
    Das funktioniert auch, allerdings wird nicht Textfeldern gesucht.

    Ich habe für iDispatch einen Beispielcode verwendet und diesen angepasst.
    Ich denke das hat mit dem Content-Objekt zu tun, finde aber keine Lösung.

    Könnt Ihr was dazu sagen bitte?
    Gruss
    Achim

    Der code

    IDispatchPtr spContent = NULL;
    
    					hr = spDispDokument.GetPropertyByName(L"Content", &vResult);
    					spContent = vResult.pdispVal;
    
    					CComDispatchDriver spDispContent(spContent);
    
    					// Mit dem Content - Object holen wir uns das Find - Object:
    					IDispatchPtr spFind = NULL;
    
    					hr = spDispContent.GetPropertyByName(L"Find", &vResult);
    					spFind = vResult.pdispVal;
    
    					CComDispatchDriver spDispFind(spFind);
    
    					hr = spDispFind.Invoke0(L"ClearFormatting", &vResult);
    
    					VARIANT vArgsExecute[11];
    					memset(vArgsExecute, 0, sizeof(VARIANT) * 11);
    
    					// Die Parameter müssen rückwärts angegeben werden !
    
    					// Parameter 1 = "FindText", der Text der gesucht wird.
    					vArgsExecute[10].vt = VT_BSTR;
    					vArgsExecute[10].bstrVal = SysAllocString(L"@Email");
    					// Parameter 2 = "MatchCase", eine Kennung, ob Groß-/Kleinschreibung  
    					vArgsExecute[9].vt = VT_BOOL;
    					vArgsExecute[9].boolVal = FALSE;
    
    					// Parameter 3 - 9 werden hier nicht benutzt
    
    					// Parameter 10 = "ReplaceWith", der Text, mit dem ersetzt werden soll:
    					vArgsExecute[1].vt = VT_BSTR;
    					vArgsExecute[1].bstrVal = SysAllocString(L"xy@dings.de");
    					// Parameter 11 = "Replace", die Angabe, 
    					// wie viele Ersetzungen durchgeführt werden. 
    					// "wdReplaceOne" = 1 ersetzt genau ein Vorkommen.
    					// "wdReplaceAll" = 2 ersetzt alle Vorkommen.
    					vArgsExecute[0].vt = VT_I2;
    					vArgsExecute[0].lVal = 2;
    

Log in to reply