0

検索オブジェクトを使用するとかなり簡単なので、ドキュメント内の単語を置き換える方法を理解しました。現在、Word文書全体で、「ロゴ」という単語を実際のロゴ画像に置き換えるのに苦労しています。

ドキュメント内の各範囲をループして、範囲内にロゴという単語が見つかった場合は、次のように画像を追加できると考えました。

foreach (Range rngStory in doc.StoryRanges)
{                
    rngStory.InlineShapes.AddPicture(filename);
}

問題は、これにより画像が範囲の一番上に追加され、テキストロゴが正確にどこにあるかではないことです。

誰かがこれを行うための良い解決策を持っていますか?

4

4 に答える 4

2

これは、次の方法で実行できます。このコードは、正確な位置でテキストを画像に置き換えます。

      Word.Application wordApp = new Word.Application();
      Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref outputFile, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                doc.Activate();
              try
                {
                    //----------------------Replace--------------------------------
                    Microsoft.Office.Interop.Word.Find fnd = wordApp.ActiveWindow.Selection.Find;
                    fnd.ClearFormatting();
                    fnd.Replacement.ClearFormatting();
                    fnd.Forward = true;
                    fnd.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;

    string imagePath = Server.MapPath("~/data/uploads/violations/resize/Image.jpg");
    var keyword = "LOGO";
                        var sel = wordApp.Selection;
                        sel.Find.Text = string.Format("[{0}]", keyword);
    wordApp.Selection.Find.Execute(keyword);

                        Word.Range range = wordApp.Selection.Range;
     if (range.Text.Contains(keyword))
                            {
                                //gets desired range here it gets last character to make superscript in range 
                                Word.Range temprange = doc.Range(range.End - 4, range.End);//keyword is of 4 charecter range.End - 4
                                temprange.Select();
                                Word.Selection currentSelection = wordApp.Selection;
                                //currentSelection.Font.Superscript = 1;

                                sel.Find.Execute(Replace: WdReplace.wdReplaceOne);
                                sel.Range.Select();
                                var imagePath1 = Path.GetFullPath(string.Format(imagePath, keyword));
                                sel.InlineShapes.AddPicture(FileName: imagePath1, LinkToFile: false, SaveWithDocument: true);
     }
}
catch { }
            finally
            {
                if (doc != null)
                {
                    ((_Document)doc).Close(ref oMissing, ref oMissing, ref oMissing);
                    Marshal.FinalReleaseComObject(doc);
                }
                if (wordApp != null)
                {
                    ((_Application)wordApp).Quit();
                    Marshal.FinalReleaseComObject(wordApp);
                }
            }
于 2017-03-27T14:37:17.717 に答える
0

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.inlineshapes.addpicture%28v=office.11​​%29.aspx

オプションのRangeパラメーターを参照してください

範囲

オプションのオブジェクト。画像がテキスト内に配置される場所。範囲が折りたたまれていない場合、画像が範囲を置き換えます。それ以外の場合は、画像が挿入されます。この引数を省略すると、画像が自動的に配置されます。

したがって、ロゴタグを付けている現在の位置を照会し、それを範囲値として使用するとします。

于 2012-05-07T11:31:02.570 に答える
0

またはこのように:これは、ドキュメント上部のテキストを画像に置き換えます

  Word.Application wordApp = new Word.Application();
  Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref outputFile, ref oMissing,
                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                 ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            doc.Activate();
          try
            {
                //----------------------Replace--------------------------------
                Microsoft.Office.Interop.Word.Find fnd = wordApp.ActiveWindow.Selection.Find;
                fnd.ClearFormatting();
                fnd.Replacement.ClearFormatting();
                fnd.Forward = true;
                fnd.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;

string imagePath = Server.MapPath("~/data/uploads/violations/resize/Image.jpg");
var keyword = "LOGO";
                    var sel = wordApp.Selection;
                    sel.Find.Text = string.Format("[{0}]", keyword);
wordApp.Selection.Find.Execute(keyword);

                    Word.Range range = wordApp.Selection.Range;


                            sel.Find.Execute(Replace: WdReplace.wdReplaceOne);
                            sel.Range.Select();
                            var imagePath1 = Path.GetFullPath(string.Format(imagePath, keyword));
                            sel.InlineShapes.AddPicture(FileName: imagePath1, LinkToFile: false, SaveWithDocument: true);




  }
  catch (Exception)
        {
        }
        finally
        {
            if (doc != null)
            {
                ((_Document)doc).Close(ref oMissing, ref oMissing, ref oMissing);
                Marshal.FinalReleaseComObject(doc);
            }
            if (wordApp != null)
            {
                ((_Application)wordApp).Quit();
                Marshal.FinalReleaseComObject(wordApp);
            }
        }
于 2017-03-27T14:41:42.697 に答える
0
var wApp = new Application();
var wDoc = wApp.Documents.Open(Path.GetFullPath(filePath), ReadOnly: false);
imagePath = Path.GetFullPath(imagePath);

foreach (Range rng in wDoc.StoryRanges)
    while (rng.Find.Execute(keyword, Forward: true, Wrap: WdFindWrap.wdFindContinue))
    {
        rng.Select();
        wApp.Selection.InlineShapes.AddPicture(imagePath, false, true);
    }
于 2020-05-24T19:19:33.847 に答える