Word文書内の変数を検索してテキストに置き換える完全に機能する機能があります。
HRESULT CMSWord::FindReplace( CString szVar, CString szText, bool bOnlyOnce/*=false*/ )
{
if(m_pWApp==NULL || m_pActiveDocument==NULL) return E_FAIL;
IDispatch *pDocApp;
{
VARIANT result;
VariantInit(&result);
OLEMethod(DISPATCH_PROPERTYGET, &result, m_pActiveDocument, L"Application", 0);
pDocApp= result.pdispVal;
}
IDispatch *pSelection;
{
VARIANT result;
VariantInit(&result);
OLEMethod(DISPATCH_PROPERTYGET, &result, pDocApp, L"Selection", 0);
pSelection=result.pdispVal;
}
IDispatch *pFind;
{
VARIANT result;
VariantInit(&result);
OLEMethod(DISPATCH_PROPERTYGET, &result, pSelection, L"Find", 0);
pFind=result.pdispVal;
}
OLEMethod(DISPATCH_METHOD, NULL, pFind, L"ClearFormatting",0);
szText.Replace(_T("\r\n"), _T("\v"));
COleVariant sVariable(szVar);
COleVariant sReplaceText(szText);
COleVariant replace((long)2);
COleVariant varBoolTrue;
varBoolTrue.boolVal = true;
COleVariant varBoolFalse;
varBoolFalse.boolVal = false;
COleVariant wdContinue((long)1);
bool bFound=false;
IDispatch *pExecute = NULL;
{
for(;;) {
VARIANT result;
VariantInit(&result);
if(OLEMethod(DISPATCH_METHOD, &result, pFind, L"Execute", 8, wdContinue, varBoolTrue, varBoolFalse, varBoolFalse, varBoolFalse, varBoolTrue, varBoolFalse, sVariable)==S_OK) {
pExecute=result.pdispVal;
if(!pExecute) break;
bFound = true;
if(szText.IsEmpty()) DeleteChar(false); else SetSelectionText(szText);
}
else break;
if(bOnlyOnce) break;
}
}
pDocApp->Release();
pSelection->Release();
pFind->Release();
if(!bFound) return E_FAIL;
else return S_OK;
}
問題は、このコードがヘッダーまたはフッターのテキストに触れないことです。
pFind 実行メソッドのパラメーターが存在する可能性がありますか?
正直なところ、月曜日からこの問題を調べていました。私の検索結果のほとんどは、VB、C#、.NET、および VBA のドキュメントですが、VC++ OLE に関するドキュメントはほとんどなく、数行のコードしかありませんが、役に立ちません。いくつかの Word マクロを作成して翻訳し始めましたが、何も機能しません。
ここ Stack Overflow で、このトピックに関連する多くの質問を見つけました。それらのいくつかは有望に見えましたが、私が知らないフレームワークを使用しているようで、サンプルコードやリンクを求めても応答がありません.
誰かがこの問題で私を助けることができれば、それは素晴らしいことです.OLE Wordオートメーションの一般的なトピックに関するドキュメントとコードへのリンクを本当に感謝します(このコードプロジェクトの記事に加えて)。
前もって感謝します!