2009-07-15 15 views
6

Sto tentando di modificare il testo e le immagini in un documento di Word utilizzando C# e automazione delle parole. Ho funzionato bene per il testo dove faccio qualcosa come il frammento di seguito, ma non so nemmeno come iniziare per sostituire l'immagine.: Sostituire un'immagine utilizzando C#

Qualsiasi aiuto è molto apprezzato!

Oliver

using Microsoft.Office.Interop.Word; 
... 

private static Application WordApp; 
private static object missing = System.Reflection.Missing.Value; 
private static object yes = true; 
private static object no = false; 

... 
object search; 
object replace; 

object replaceAll = 
    Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll; 

object filename = SourceFile; 
object destination = DestinationFile; 

Document d = WordApp.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); 

d.Activate(); 
search = "OLDSTRING"; 
replace = "NEWSTRING"; 
WordApp.Selection.Find.Execute(
    ref search, ref yes, ref yes, ref no, ref no, ref no, ref yes, 
    ref missing, ref missing, ref replace, ref replaceAll, 
    ref missing, ref yes, ref missing, ref missing); 
+0

curioso che tipo di soluzione che si sta tentando di fare. È una funzionalità che stai esponendo all'interno del componente aggiuntivo di Word o è una sorta di automazione batch da un'applicazione esterna? Se esterno, preferirei passare con l'override del WordML attraverso OpenXML SDK per il 2007 o semplicemente gironzolare con w/xml se invece il 2003. Molto più veloce e facile da fare. –

+3

Solo un suggerimento. Usa VB. Renderà più facile la tua vita in COM Automation Land. Per quanto riguarda la sostituzione delle immagini, è possibile esaminare gli "Intervalli" e potrebbero essere in grado di scorrere il testo e gli oggetti in essi alla ricerca di tipi di oggetto immagine. –

+0

@roygbiv: +1. VB è molto più semplice per l'automazione COM – shahkalpesh

risposta

8

È possibile scorrere le InlineShapes e sostituire le immagini

using System.Collections.Generic; 
using Word = Microsoft.Office.Interop.Word; 

namespace WordExample 
{ 
    class WordExample 
    { 
     #region Constructor 
     public WordExample() 
     { 
      WordApp = new Microsoft.Office.Interop.Word.Application(); 
     } 
     #endregion 

     #region Fields 
     private Word.Application WordApp; 
     private object missing = System.Reflection.Missing.Value; 
     private object yes = true; 
     private object no = false; 
     private Word.Document d; 
     private object filename = @"C:\FullPathToFile\example.doc"; 
     #endregion 

     #region Methods 
     public void UpdateDoc() 
     { 
      d = WordApp.Documents.Open(ref filename, ref missing, ref no, ref missing, 
       ref missing, ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref yes, ref missing, ref missing, ref missing, ref missing); 
      List<Word.Range> ranges = new List<Microsoft.Office.Interop.Word.Range>(); 
      foreach (Word.InlineShape s in d.InlineShapes) 
      { 
       if (s.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture) 
       { 
        ranges.Add(s.Range); 
        s.Delete(); 
       } 
      } 
      foreach (Word.Range r in ranges) 
      { 
       r.InlineShapes.AddPicture(@"c:\PathToNewImage\Image.jpg", ref missing, ref missing, ref missing); 
      } 
      WordApp.Quit(ref yes, ref missing, ref missing); 
     } 
     #endregion 
} 
} 
+1

Codice eccellente! Ma se è possibile identificare un'immagine nel loop? questo è perché ho bisogno di sostituire solo un'immagine nel mio progetto di automazione grazie in anticipo –

+0

So che questo è molto vecchio, ma l'unico modo per distinguere le forme è aggiungere le informazioni personalizzate. Puoi aggiungere un hyperlink e usare l'indirizzo, oppure usare le proprietà 'Title' o' AlternativeText' (queste sono visibili nella finestra di dialogo 'Format Picture', in' Alt Text'). – Chris

Problemi correlati