2013-01-08 1 views
1

단어 문서 내 텍스트 자리 표시자를 찾아서 바꾸는 기능이 있습니다. 어떤 짧은 텍스트 문자열을 잘 작동합니다. 큰 텍스트 문자열 즉 텍스트 단락으로 바꿀 때 아무 것도하지 않습니다.C# 단어 자동화 긴 텍스트 필드 찾기 및 바꾸기

DocReplaceField(ref Word.Document objDoc, string Field, string Value) 
{ 
    object missing = System.Reflection.Missing.Value; 

    Word.Range range = objDoc.Content; 

    object findtext = Field; 
    object f = false; 
    object findreplacement = Value; 
    object findforward = false; 
    object findformat = true; 
    object findwrap = WdFindWrap.wdFindContinue; 
    object findmatchcase = false; 
    object findmatchwholeword = false; 
    object findmatchwildcards = false; 
    object findmatchsoundslike = false; 
    object findmatchallwordforms = false; 
    object findreplace = WdReplace.wdReplaceAll; 

    range.Find.Execute(
     findtext, 
     findmatchcase, 
     findmatchwholeword, 
     findmatchwildcards, 
     findmatchsoundslike, 
     findmatchallwordforms, 
     findforward, 
     findwrap, 
     findformat, 
     findreplacement, 
     findreplace, 
     missing, 
     missing, 
     missing, 
     missing); 
} 

"Nullam 비가 lorem 사피엔스, 등 imperdiet 사피엔스. Curabitur 도박으로"[자리 표시 자]를 "이"뭔가 "와"[자리 표시 자] "내가 대체하려고하면 찾을 작동하지만 내가 어떻게 교체하는 네가 할 수있는 한도 내에서 모든 일을 할 수있게해라. 천천히 움직일 수있는 정수기, 정수기, 정수기, 정수기, 정수기 등. 정수기가 아닌 정수기에 정수기가 있어야합니다. Praesent laoreet mauris id sem venenatis pellentesque. " 예를 들어

UPDATE :

문제는의 발견과 255 개 이상의 문자를 대체 할 수있는 대체 그 단어 것으로 보인다. 검색은 자리 표시 자와 일치하지만 실제로 텍스트를 바꿀 수는 없습니다. 누구든지 찾기를 호출하여 자리 표시자를 찾지 만 수동으로 텍스트를 선택하고 새 텍스트를 삽입하는 예가 있습니까? 대신 find라는 단어를 사용하고 바꿉니다.

답변

3

그것은 텍스트를 대체하는 것은 매우 간단합니다 : 당신이 그것을 발견하면, 범위 객체는 문서의 발견 부분이 포함됩니다.

range.Find.Execute(findtext, findmatchcase, findmatchwholeword, 
    findmatchwildcards, findmatchsoundslike, findmatchallwordforms, findforward, 
    findwrap, findformat, findreplacement, findreplace, missing, 
    missing, missing, missing); 

range.Delete(); 
range.Text = "This is the new content."; 
+0

이것은 작동하지 않습니다. 런타임에는 findtext 매개 변수가 너무 길다는 불평에 따라 Find.Execute에서 중지됩니다. –

1

찾기 및 바꾸기 대신 Word 책갈피를 사용해 볼 수 있습니까?

의 예 snipper -

object oBookMark = "MyBookmark"; 
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here"; 
+0

아니요 시스템에서 100 개의 템플릿을 사용하므로 북마크가 추가되지 않습니다. – Jammy

+0

저는 그것이 Word의 한계라고 생각합니다. 바꾸기에는 최대 255 자까지 걸릴 수 있습니다. Word의 찾기 및 바꾸기에서 직접 사용해보십시오. Word 2013에이 제한이 있음을 알았습니다. –

+0

예 단어 자체에 제한이 있습니다. 코드 작업을 찾고 있습니다. – Jammy

0

귀하의 문제는 가능성이 여러 줄의 텍스트에 대한 검색입니다.

"\ 연구 \ n"당신이 선을 넘어 때마다, 또한 당신이 단지 같은 여러 문자열을 만들 수 없습니다, 당신은 시작에 @를 사용할 필요가 추가

보십시오 : 이상

@"firstLine\r\n 
second"; 

기타 execute 메서드에서 여러 줄 옵션이 표시되지 않습니다. execute 메소드의 인수는 모두 기본값을 가지고 있으므로 명명 된 매개 변수를 사용하고 사용하지 않는 매개 변수는 생략 할 수 있습니다.

또한 여러 줄로 문제를 일으키는 질문을 편집하십시오.

편집 : 대체 텍스트를 인수로 제공하는 대신 이후에 설정해야합니다. http://social.msdn.microsoft.com/forums/en-US/vsto/thread/9c50450e-9579-4e89-8e9c-8c84c8319d0b

range.Execute(... arguments ...); 
range.Text = "Replacement text more than 255 characters"; 

또 다른 옵션은 말씀이 대체 텍스트로 클립 보드에 배치됩니다 어떤 텍스트 사용하는 암시합니다 대체 텍스트로^C를 사용하는 것입니다. http://word.tips.net/T000021_Replacing_Long_Blocks_of_Text.html

System.Windows.Forms.Clipboard.SetText("Replacement text longer than 255 chars"); 
range.Execute(... replacementText: "^c ...); // don't actually know where you enter your replacement text :P 
+0

검색은 Srikanth Venugopalan이 언급 한 대체 텍스트가 단어의 찾기 바꾸기 기능의 한계 인 255자를 초과하여 교체 부분을 잘 처리합니다. 검색 구문은 255자를 넘지 않습니다. – Jammy

1

내가 뭘하는 작은 조각으로 대체 문자열을 깨고, 그리고 마지막 하나를 제외한 모든 문자열의 끝에서 자리 표시자를 추가 : 먼저 찾은 텍스트를 삭제해야 후 새 삽입 그런 다음 replace 명령을 문자열 조각만큼 반복하십시오.더 작은 문자열에서도 작동하므로 다른 방법을 사용할 필요가 없습니다.

string acierto; // where acierto is my placeholder 
string[] cadenas; 
cadenas = BSV.Funciones.ParteCadenas(valor, 170); // function to split a string into 170 character pieces 

for (int xx = 0; xx < cadenas.Length; xx++) 
{ 
    if (xx < cadenas.Length - 1) cadenas[xx] += acierto; 
    parrafo.Range.Find.Execute(acierto, nulo, nulo, nulo, nulo, nulo, nulo, nulo, nulo, cadenas[xx], WdReplace.wdReplaceAll, nulo, nulo, nulo, nulo); 
} 
1

다음은 문제에 대한 빠르고 간단한 해결책입니다. range.Find.Execute 메서드가 255자를 초과하여 작동하지 않으면 텍스트 문자열에서 바꾸기를 실행하는 것보다 문서를 수동으로 검색하고 텍스트를 검색 할 수 있습니다.

Using Word = Microsoft.Office.Interop.Word; 
Using System.Text.RegularExpressions; //This is used for Regex 

당신은 Microsoft Word 개체 라이브러리에 추가해야합니다 다음이 포함되어야합니다 아래

코드를 사용합니다. 아래는 처음부터 끝까지의 코드입니다.

string filePath = @"C:\YourfilePathHere"; 
string findText = "Your text to locate goes here"; 
string replaceText = "The replacement text longer than 255 characters"; 
Word.Application fileOpen = new Word.Application; 
Word.Document doc = fileOpen.Documents.Open(filePath, ReadOnly: false); 
foreach (Word.Paragraph para in doc.Paragraphs) { 
    Word.Range paraRange = para.Range; 
    string text = paraRange.Text; 
    Regex regex = new Regex(findText); 
    string final = regex.Replace(text, replaceText); 
    paraRange.Text = final; 
} 

이제 위의 내용은 텍스트를 무제한 크기의 대체물로 대체하게됩니다.

관련 문제