2010-05-18 7 views
6

Tôi đang cố viết mã tìm/thay thế cho tài liệu Word bằng cách sử dụng Tự động hóa từ thông qua Interop.Word (11.0). Tất cả tài liệu của tôi đều có các trường khác nhau (không hiển thị trong Document.Fields) được bao quanh với dấu ngoặc vuông, ví dụ: <DATE> cần được thay thế bằng DateTime.Now.Format("MM/dd/yyyy"). Việc tìm/thay thế hoạt động tốt. Tuy nhiên, một số văn bản được thay thế là đúng hợp lý, và sau khi thay thế, văn bản kết thúc tốt đẹp đến dòng tiếp theo. Có cách nào để tôi có thể giữ nguyên biện minh khi tôi thực hiện việc thay thế không? Mã dưới đây:Sử dụng Interop.Word, có cách nào để thay thế (sử dụng Find.Execute) và giữ nguyên văn bản gốc không?

using Word = Microsoft.Office.Interop.Word; 

Word.Application wordApp = null; 
try 
{ 
    wordApp = new Word.Application {Visible = false}; 
    //.... open the document .... 
    object unitsStory = Word.WdUnits.wdStory; 
    object moveType = Word.WdMovementType.wdMove; 
    wordApp.Selection.HomeKey(ref unitsStory, ref moveType); 
    wordApp.Selection.Find.ClearFormatting(); 
    wordApp.Selection.Find.Replacement.ClearFormatting(); //tried removing this, no luck 
    object replaceTextWith = DateTime.Now.ToString("MM/dd/yyyy"); 
    object textToReplace = "<DATE>"; 
    object replaceAll = Word.WdReplace.wdReplaceAll; 
    object typeMissing = System.Reflection.Missing.Value; 
    wordApp.Selection.Find.Execute(ref textToReplace, ref typeMissing, 
     ref typeMissing, ref typeMissing, ref typeMissing, ref typeMissing, 
     ref typeMissing, ref typeMissing, ref typeMissing, ref typeMissing, 
     ref replaceTextWith, ref replaceAll, ref typeMissing, ref typeMissing, 
     ref typeMissing, ref typeMissing); 
    // ... save quit etc.... 
} 
finally 
{ 
    //clean up wordApp 
} 

TIA.

Trả lời

7

Bạn có thể Microsoft.Office.Interop.Word.WdParagraphAlignment cho sự liên kết

 Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); 
     Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document(); 

     object missing = System.Type.Missing; 

     try 
     { 
      object fileName = @"C:\TT\change.doc"; 
      doc = word.Documents.Open(ref fileName, 
       ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing); 

      doc.Activate(); 

      foreach (Microsoft.Office.Interop.Word.Range tmpRange in doc.StoryRanges) 
      { 
       tmpRange.Find.Text = "<DATE>"; 
       tmpRange.Find.Replacement.Text = DateTime.Now.ToString("MM/dd/yyyy"); 
       tmpRange.Find.Replacement.ParagraphFormat.Alignment = 
        Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphJustify; 



       tmpRange.Find.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue; 
       object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll; 

       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); 
      } 

      doc.Save(); 

      doc.Close(ref missing, ref missing, ref missing); 
      word.Application.Quit(ref missing, ref missing, ref missing); 
     } 
     catch (Exception ex) 
     { 
      doc.Close(ref missing, ref missing, ref missing); 
      word.Application.Quit(ref missing, ref missing, ref missing); 
     } 
+0

Sau khi ứng dụng bỏ đối tượng phát hành từ bộ nhớ sử dụng Marshal.ReleaseComObject (đối tượng của bạn). – KFP