2010-12-18 5 views
1

이 작업은 .NET을 사용하는 Word 문서의 특정 키워드를 바꿀 작업입니다. 원본 서식 및 문서 구조를 유지하는 데 가장 빠르고 신뢰할 수있는 방법은 무엇입니까?Word 문서에서 텍스트를 프로그래밍 방식으로 가장 빨리 바꾸는 방법

+0

.NET이어야합니까? Word에는이를 수행 할 수있는 완전한 기능의 매크로 언어 (Visual Basic for Applications)가 있습니다. VBA에서 매크로를 기록 할 수도 있습니다. 이것을 mailmerge 기능 및 작업 완료와 결합하십시오. .NET을 실제로 사용해야하는 경우 VBA를 .NET 및 OLE 자동화로 손쉽게 변환 할 수 있습니다. 또는 실제로 Word를 설치하지 않고이 작업을 수행해야합니까? 오. "가장 빠른"무엇입니까? 가장 빨리 구현할 수 있습니까? 단일 문서에서 가장 빠른 성능? 여러 문서에서 가장 빠른 성능? –

답변

3

단어가 설치되어 있다면 꽤 사소합니다.

GAC에서 Word 문서 어셈블리를 참조합니다. 단어 문서를로드하고 그 안에있는 데이터를 바꿀 수 있습니다.

이것은 클라이언트 이름 등을 입력하여 워드 문서를 인쇄하는 앱에서 가져온 것입니다. (잘라 붙인 섹션)

public void ReplaceWordDoc(ref Document doc, object data) 
    { 
     object missing = Missing.Value; 

     List<ReplacerSearch> search = GetSearchList(data); 

     foreach (var searchItem in search) 
     { 
      foreach (Range tmpRange in ((Document)doc).StoryRanges) 
      { 
       // Set the text to find and replace 
       tmpRange.Find.Text = searchItem.Find; 
       tmpRange.Find.Replacement.Text = searchItem.Replace; 

       // Set the Find.Wrap property to continue (so it doesn't 
       // prompt the user or stop when it hits the end of 
       // the section) 
       tmpRange.Find.Wrap = WdFindWrap.wdFindContinue; 

       // Declare an object to pass as a parameter that sets 
       // the Replace parameter to the "wdReplaceAll" enum 
       object replaceAll = WdReplace.wdReplaceAll; 

       // Execute the Find and Replace -- notice that the 
       // 11th parameter is the "replaceAll" enum object 
       tmpRange.Find.Execute(ref missing, ref missing, ref missing, 
        ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing, ref missing, ref replaceAll, 
        ref missing, ref missing, ref missing, ref missing); 
      } 
     } 
    } 

^이 부분은 찾기/바꾸기를 수행합니다. ReplacerSearch (와우 나쁜 이름) 목록은 Find, Replace의 두 가지 속성입니다. Find는 찾을 텍스트이고, Replace는 바꿀 텍스트입니다.

다음 코드는 지정된 파일 이름 (경로/이름)을 기반으로 word 인스턴스를 만들고 문서를 열고 대체 작업을 수행 한 다음 저장하거나 인쇄 할 수 있습니다.

object fileName  = string.Empty, 
      trueValue  = true, 
      missing   = Missing.Value, 
      falseValue  = false; 
    var  app    = new ApplicationClass(); 
    var doc = new Document(); 

try 
{ 
    doc = app.Documents.AddOld(ref fileName, ref missing); 
    //doc = app.Documents.Add(ref fileName, ref missing, ref missing, ref missing); 

    // Loops through the StoryRanges (sections of the Word doc) 
    ReplaceWordDoc(ref doc, item); 

    //Save or print... 
} 
catch (Exception ex) 
{ 
    Helpers.Logger.WriteToEventLog(ex.Message, EventLogEntryType.Error); 
} 
finally 
{ 
    if (doc != null) 
    { 
     doc.Close(ref falseValue, ref missing, ref missing); 
    } 
} 

if (app != null) 
{ 
    app.Application.Quit(ref falseValue, ref missing, ref missing); 
} 

희망이 있습니다.

+0

그것은 일을하고 비교적 빨리 작동합니다. – SharpAffair

1

새로운 Word 파일은 기본적으로 XML 문서입니다. Python과 같은 언어로 일반 파일로 열 수 있으며 바꿀 용어를 검색 할 수 있습니다. 일단 파일을 찾으면 파일을 저장하고 저장하는 것입니다.

아마도 XML 문서에 맞게 조정 된 간단한 방법 일 수도 있지만 문자열 라이브러리를 사용하면이 작업을 수행 할 수 있습니다.

편집 : 동일한 방법론이 .NET에서이를 수행하기 위해 작동해야합니다. 이제 막 태그를 발견했습니다.

+0

기본 형식은 여전히 ​​바이너리입니다. –

+1

OpenXML SDK가 가능성이 높습니다. .net, 상당히 사용하기 쉽다. 유일한 문제는 "찾을 단어"가 일관성없는 서식을 지정하는 경우 첫 단어 BOLD 및 나머지 일반 단어로 말하면 "단어"가 단일 문자열로 나타나지 않는다는 것입니다. xml은 RUN 객체로 나뉘어집니다. xml을 적절히 구문 분석하면됩니다. 이것은 작은 일이 아닙니다. .net을 사용하여 찾기 및 바꾸기를 자동화하는 것이 가장 신속하게 구현 될 수 있으며 적절한 성능이 있어야합니다. Word의 FIND REPLACE는 훌륭하지는 않지만 확실히 좋습니다. – DarinH

관련 문제