2009-07-15 5 views
6

Я пытаюсь изменить текст и изображения в текстовом документе, используя C# и автоматизацию слов. У меня это нормально работает для текста, где я делаю что-то вроде фрагмента ниже, но я даже не знаю, как начать замену изображения.Word Automation: замените изображение с помощью C#

Любая помощь очень ценится!

Оливер

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

Любопытный какие решения вы пытаетесь сделать. Является ли это функциональностью, которую вы размещаете внутри надстройки Word, или это какая-то периодическая автоматизация из внешнего приложения? Если внешний, я бы предпочел переопределить WordML через OpenXML SDK на 2007 год или просто повредить w/xml if 2003 вместо этого. Гораздо быстрее и легче сделать. –

+3

Просто предложение. Используйте VB. Это упростит вашу жизнь в COM Automation. Что касается замены изображений, вы можете посмотреть в «Диапазоны» и, возможно, выполнить итерацию через текст и объекты в них, которые ищут типы объектов изображения. – 2009-07-15 01:30:09

+0

@roygbiv: +1. VB намного проще для автоматизации COM – shahkalpesh

ответ

8

Вы можете перебрать InlineShapes и заменить фотографии

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

Отличный код! Но если можно идентифицировать изображение в цикле? Это потому, что мне нужно заменить только одно изображение в мой проект автоматизации. Заранее спасибо –

+0

Я знаю, что это действительно старо, но единственный способ, которым вы действительно можете отличить друг от друга, - это добавить к нему пользовательскую информацию. Вы можете добавить гиперссылку и использовать адрес, или использовать свойства «Title» или «AlternativeText» (они видны в диалоговом окне «Формат изображения» в разделе «Alt Text»). – Chris

Смежные вопросы