none
C#でWord上の図形の位置を固定するコーディング RRS feed

  • 質問

  • Wordブック上に貼り付けてある図形をC#を使って位置を固定化したいのですが、どのようにコーディングすればよいかわかりません。

    プログラムのコーディングに、「using Microsoft.Office.Core」、「using Microsoft.Office.Interop.Word」、「using Word = Microsoft.Office.Interop.Word」は宣言しています。 さらに図形の名前は「Picture 4」となっています。

    Wordそのものの操作では、対象となる図形の「レイアウトの詳細」の位置タブにある「垂直方向」の「下方向の距離」に値を設定すればその位置で固定化されますが、ときどきその図形を触ってしまい位置がずれることがありますので、その時の補完をプログラムでおこないたいと考えています。 よろしくご教示のほどお願いします。

    2018年4月28日 7:10

回答

  • こんな?

    namespace ConsoleApp1
    {
        using Microsoft.Office.Interop;
        using Word = Microsoft.Office.Interop.Word;
    
        class Program
        {
            static void Main(string[] args)
            {
                Word.Application app = null;
    
    
                Word.Documents docs=null;
                Word.Document doc = null;
                Word.Shapes shps = null;
                Word.Shape shp = null;
                try
                {
                    app = new Word.Application();
                    app.Visible = true;
    
                    docs = app.Documents;
                    doc = docs.Open(@"W:\Test.docx");
    
                    shps = doc.Shapes;
                    shp=shps["Picture 4"];
               
                    shp.RelativeVerticalPosition = Word.WdRelativeVerticalPosition.wdRelativeVerticalPositionPage;
                    shp.Top = 200;
                }
                finally
                {
                    shp.ReleaseComObject();
                    shps.ReleaseComObject();
                    doc.ReleaseComObject();
                    docs.ReleaseComObject();
                    app.ReleaseComObject();
                }
            }
        }
    
        public static class Com
        {
            public static void ReleaseComObject(this object o)
            {
                if (o != null && System.Runtime.InteropServices.Marshal.IsComObject(o))
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
                }
            }
        }
    }

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2018年4月28日 9:31
    • 回答としてマーク inoshishiboa 2018年4月28日 11:07
    2018年4月28日 9:30

すべての返信

  • こんな?

    namespace ConsoleApp1
    {
        using Microsoft.Office.Interop;
        using Word = Microsoft.Office.Interop.Word;
    
        class Program
        {
            static void Main(string[] args)
            {
                Word.Application app = null;
    
    
                Word.Documents docs=null;
                Word.Document doc = null;
                Word.Shapes shps = null;
                Word.Shape shp = null;
                try
                {
                    app = new Word.Application();
                    app.Visible = true;
    
                    docs = app.Documents;
                    doc = docs.Open(@"W:\Test.docx");
    
                    shps = doc.Shapes;
                    shp=shps["Picture 4"];
               
                    shp.RelativeVerticalPosition = Word.WdRelativeVerticalPosition.wdRelativeVerticalPositionPage;
                    shp.Top = 200;
                }
                finally
                {
                    shp.ReleaseComObject();
                    shps.ReleaseComObject();
                    doc.ReleaseComObject();
                    docs.ReleaseComObject();
                    app.ReleaseComObject();
                }
            }
        }
    
        public static class Com
        {
            public static void ReleaseComObject(this object o)
            {
                if (o != null && System.Runtime.InteropServices.Marshal.IsComObject(o))
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
                }
            }
        }
    }

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2018年4月28日 9:31
    • 回答としてマーク inoshishiboa 2018年4月28日 11:07
    2018年4月28日 9:30
  • gekka様

    早速のご教示、誠にありがとうございます。

    ご呈示のコーディング内容を参考にさせてもらい、当方の目的を果たすことができました。

    感謝申し上げます。

    • 回答としてマーク inoshishiboa 2018年4月28日 11:07
    • 回答としてマークされていない inoshishiboa 2018年4月28日 11:07
    2018年4月28日 11:07