VSTO Wordの表のセル内に画像を挿入したい・貼り付けたい

Word表へのコードでの画像貼り付け VSTO
Word表へのコードでの画像貼り付け
スポンサーリンク
スポンサーリンク

したいこと

  • VSTOでワード(Word)のセルの内に画像を挿入したい。
  • VSTOでワード(Word)のセルの内に画像を貼り付けたい。
  • C#でワード(Word)のセルの内に画像を挿入・貼り付けたい。

結論

cell.Range.InlineShapes.AddPicture() のように、Tableのセルを指定して、そこに貼り付けるとOKでした。

ほんとに資料がなくて、英語でもなくて、3時間ぐらいはここら辺をウロチョロしてました。かなり価値はあると思います。

経緯

前やったみたいに、VSTO Excelならそこそこ簡単にできたので、ワード(Word)でも簡単に実現できかと思ってました。

現在の位置に画像を貼り付ける(成功)

Word VSTOの公式サンプルコードを参考に例のごとく、ボタンから挿入するようにしました。ボタンから挿入しないとWordの文書が開いていないと、Visual Studioに怒られます。以下がそのコードです。

// 長くなるのでappとしました。
Application app = Globals.ThisAddIn.Application;
// 画像の貼り付け
app.Selection.InlineShapes.AddPicture(@"C:\tmp\img.png");

これは簡単にできます。そして、文字列の折り返しの設定をInline(行内)から変換する場合は、オブジェクトを変換する必要があります。以下そのコード

// Shapeを変換
Shape conShape = shape.ConvertToShape();
// Shapeを図の設定を「前面」に設定。
conShape.WrapFormat.Type = WdWrapType.wdWrapFront;
conShape.Top = 200;
conShape.Left = 150;

コードで行内⇒前面に設定変換した図

Word文書に表を作成する(成功)

Word VSTOの公式サンプルコードを参考に上記と同じように、Wordに表を挿入します。using Microsoft.Office.Interop.Word;が先頭で定義されています。

// 長くなるのでappとしました。
Application app = Globals.ThisAddIn.Application;

// 表の場所を選択
Range tableLocation  = app.ActiveDocument.Range(0, 0);

// 表の作成
Table newTable = app.ActiveDocument.Tables.Add(tableLocation, 3, 4);
newTable.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
newTable.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle;

// 行方向の高さを設定
newTable.Rows.Height = 50;

表の中に画像をそのまま貼り付けてみた(失敗)

以下失敗例をリストアップ。だめなものは繰り返さないでくださいね。

  • そのまま、上記コードを順番を変えて連続してやってみましたがうまくいきません。
  • Cellで選択後[cell.Select()を実行後]、現在の位置に画像を貼り付けるを行ってもだめ。。

他にも色々失敗がありましたが、混乱するのでここらへんでやめておきます。

表への画像の貼り付け[成功コード]

せっかくなので、表に文字を貼り付ける公式サンプルと併せて、画像の貼り付けをやってみます。Talbes[1]と指定してますが、上記のnewTableを使用しても可です。

 
// セル1へテキストを左詰めで挿入 
Cell cell1 = app.ActiveDocument.Tables[1].Cell(1, 1); 
cell1.Range.Text = "Name1-1"; 
cell1.Range.ParagraphFormat.Alignment
 = WdParagraphAlignment.wdAlignParagraphLeft;

// セル1へ画像を貼り付けます (ここがミソ)  
cell1.Range.InlineShapes.AddPicture(@"C:\tmp\img.png"); 

// セル2へテキストを左詰めで挿入 
Cell cell2 = app.ActiveDocument.Tables[1].Cell(2, 2); 
cell2.Range.Text = "Name2-2"; 
cell2.Range.ParagraphFormat.Alignment    
  =  WdParagraphAlignment.wdAlignParagraphLeft; 

// セル2へ画像を貼り付けます (ここがミソ) 
cell2.Range.InlineShapes.AddPicture(@"C:\tmp\img.png"); 

実行結果が以下です。

Wordの表に画像とテキストを挿入
Wordの表に画像とテキストを挿入

まとめ

英語も含めて検索してもまともな感じのコードが出てこなかったので、色々とテストしてみて、ようやく正しい動きになりました。是非ご活用ください。

タイトルとURLをコピーしました