2009-07-15 12 views
6

J'essaie de changer le texte et les images dans un document Word en utilisant C# et l'automatisation de mot. Je l'ai bien fonctionner pour le texte où je fais quelque chose comme l'extrait ci-dessous, mais je ne sais même pas comment commencer à remplacer l'image.Word Automation: Remplacer une image en utilisant C#

Toute aide est grandement appréciée!

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

Curieux quel genre de solution que vous essayez de faire. S'agit-il d'une fonctionnalité que vous exposez dans le complément Word ou d'une sorte d'automatisation de traitement par lots à partir d'une application externe? Si externe, je préférerais passer outre le WordML par le biais du SDK OpenXML pour 2007 ou simplement déconner w/le xml si 2003 à la place. Beaucoup plus rapide et plus facile à faire. –

+3

Juste une suggestion. Utilisez VB. Cela rendra votre vie dans le domaine de l'automatisation COM plus facile. En ce qui concerne le remplacement des images, vous pouvez regarder dans "Plages" et peut être en mesure de parcourir le texte et les objets à la recherche de types d'objet image. –

+0

@roygbiv: +1. VB est beaucoup plus facile pour l'automation COM – shahkalpesh

Répondre

8

Vous pouvez parcourir les InlineShapes et remplacer les images

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

Excellent code! Mais s'il est possible d'identifier une image dans la boucle? parce que j'ai besoin de remplacer une seule image dans mon projet d'automatisation Merci d'avance –

+0

Je sais que c'est vraiment vieux, mais la seule façon de vraiment différencier les formes est d'y ajouter des informations personnalisées. Vous pouvez ajouter un lien hypertexte et utiliser l'adresse, ou utiliser les propriétés 'Title' ou' AlternativeText' (celles-ci sont visibles dans la boîte de dialogue 'Format Picture', sous' Alt Text'). – Chris

Questions connexes