2010-05-18 6 views
6

Sto tentando di scrivere il codice di ricerca/sostituzione per i documenti di Word utilizzando l'automazione di Word tramite Interop.Word (11.0). Tutti i miei documenti hanno vari campi (che non vengono visualizzati in Document.Fields) circondati da parentesi, ad es., <DATE> deve essere sostituito con DateTime.Now.Format("MM/dd/yyyy"). La ricerca/sostituzione funziona correttamente. Tuttavia, parte del testo che viene sostituito è giustificato a destra e, al momento della sostituzione, il testo viene spostato sulla riga successiva. C'è un modo in cui posso mantenere la giustificazione quando eseguo la sostituzione? Il codice è qui sotto:Usando Interop.Word, c'è un modo per fare una sostituzione (usando Find.Execute) e mantenere la giustificazione del testo originale?

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.

risposta

7

Puoi Microsoft.Office.Interop.Word.WdParagraphAlignment per l'allineamento

 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

Dopo l'applicazione uscire oggetto rilascio dalla memoria usando Marshal.ReleaseComObject (l'oggetto). – KFP

Problemi correlati