2013-10-08 34 views
6

2010 docx kelimesinin içindeki metni değiştirmek için kodum var.C# word interop her şeyi bulup değiştirin

 object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, "document.docx"); 

     Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true }; 

     Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref fileName, ReadOnly: false, Visible: true); 

     aDoc.Activate(); 

     Microsoft.Office.Interop.Word.Find fnd = wordApp.ActiveWindow.Selection.Find; 

     fnd.ClearFormatting(); 
     fnd.Replacement.ClearFormatting(); 
     fnd.Forward = true; 

     fnd.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue; 

     fnd.Text = "{id}"; 
     fnd.Replacement.Text = "123456"; 
     fnd.Execute(Replace: WdReplace.wdReplaceAll); 

Bu biçimlendirme olmadan çalışır. Ancak, {id} formatlandığında, metni değiştirmez.

Bu kod biçimlendirmeyi yok saymayı nasıl sağlayabilirim?

cevap

21

Bu işlevi bulmak ve değiştirmek için kullanıyorum. Seçeneklerden herhangi birini belirtebilirsiniz.

object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, "document.docx"); 
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true }; 
Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(fileName, ReadOnly: false, Visible: true); 
aDoc.Activate(); 
FindAndReplace(wordApp, "{id}", "12345"); 

Ve .... tekrar tekrar bu yardımcı olur
Umut FindAndReplace işlevini kullanabilirsiniz:

private void FindAndReplace(Microsoft.Office.Interop.Word.Application doc, object findText, object replaceWithText) 
{ 
    //options 
    object matchCase = false; 
    object matchWholeWord = true; 
    object matchWildCards = false; 
    object matchSoundsLike = false; 
    object matchAllWordForms = false; 
    object forward = true; 
    object format = false; 
    object matchKashida = false; 
    object matchDiacritics = false; 
    object matchAlefHamza = false; 
    object matchControl = false; 
    object read_only = false; 
    object visible = true; 
    object replace = 2; 
    object wrap = 1; 
    //execute find and replace 
    doc.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord, 
     ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace, 
     ref matchKashida ,ref matchDiacritics, ref matchAlefHamza, ref matchControl);     
} 

Ve kullanım

olurdu.

+0

Wow! Şaşırtıcı, teşekkürler! – Lukas

+0

Yardım etmek için mutluyum :) – joecop

+1

Bu tutarsız. Bazen çalışır, bazen olmaz. –

0

Bu deneyebilirsiniz:

var doc = new Microsoft.Office.Interop.Word.Application().Documents.Open("document.docx"); 

doc.Content.Find.Execute("{id}", false, true, false, false, false, true, 1, false, "12345", 2, 
false, false, false, false); 
doc.Save(); 
+0

benim için çalışmıyor –

0

Visual Studio 2013 itibaren bunu yapabilirsiniz: Bu soru geldi ama benim gibi kimseye yararı, için gönderildi

Word.Range range = this.Application.ActiveDocument.Content; 
range.Find.ClearFormatting(); 
range.Find.Execute(FindText: "find text", ReplaceWith: "replace text", Replace: Word.WdReplace.wdReplaceAll); 

(araçların aynı sürümlerini OP olarak kullanma.)

+0

Word aşağıdaki ad alanında: Microsoft.Office.Interop – R2D2

0

Dize 255'ten fazla karakter içeriyorsa bir dizeyi bölen bir yöntem.

void FindAndReplace(Microsoft.Office.Interop.Word.Application doc, string findText, string replaceWithText) 
    { 
     if (replaceWithText.Length > 255) 
     { 
      FindAndReplace(doc, findText, findText + replaceWithText.Substring(255)); 
      replaceWithText = replaceWithText.Substring(0, 255); 
     } 

     //options 
     object matchCase = false; 
     object matchWholeWord = true; 
     object matchWildCards = false; 
     object matchSoundsLike = false; 
     object matchAllWordForms = false; 
     object forward = true; 
     object format = false; 
     object matchKashida = false; 
     object matchDiacritics = false; 
     object matchAlefHamza = false; 
     object matchControl = false; 
     object read_only = false; 
     object visible = true; 
     object replace = 2; 
     object wrap = 1; 

     //execute find and replace 
     doc.Selection.Find.Execute(findText, ref matchCase, ref matchWholeWord, 
      ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, replaceWithText, ref replace, 
      ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl); 
    } 
İlgili konular