質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

3回答

1822閲覧

C# WPFでWord文書に画像を挿入したい

MINISIZE

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

1クリップ

投稿2018/03/21 16:29

前提・実現したいこと

C#,WPFでWord文書を作成するデスクトップアプリケーションを作成しています。
画像をWord文書に挿入したいのです。

発生している問題・エラーメッセージ

Microsoft.Office.Interop.Word名前空間の
InlineShapes.AddPicture()メソッドで実現できるらしいのですが、うまく利用できません。
具体的には以下のようなエラーになります。

1.AddPicture()自体が呼べない
using Word = Microsoft.Office.Interop.Word;
Word.InlineShapes.AddPicture(@"C:\SamplePicture.jpg");

エラーメッセージ 静的でないフィールド、メソッド、またはプロパティ 'InlineShapes.AddPicture(string, ref object, ref object, ref object)' で、オブジェクト参照が必要です

2.素人考えでInlineShapesクラスをnewしてみたところ、それもNG。
Word.InlineShapes inlineShapes = new Word.InlineShapes();

エラーメッセージ 抽象クラスまたはインターフェイス 'InlineShapes' のインスタンスを作成できません。

⇒調べてみたらインタフェースクラスでした。

該当のソースコード

C#(WPFアプリケーション)

1using Word = Microsoft.Office.Interop.Word; 2 3// Word アプリケーションオブジェクトを作成 4Word.Application word = new Word.Application(); 5// Word の GUI を起動しないようにする 6word.Visible = false; 7// 新規文書を作成 8Word.Document document = word.Documents.Add(); 9 10Word.InlineShapes.AddPicture(@"C:\SamplePicture.jpg"); 11

調べてみたこと

・メソッド、クラス周りのstatic修飾子を確認
⇒AddPicture()自体はstaticメソッドではない様子。
⇒利用元の自作クラス・メソッド側でstaticは使用していない。

補足情報

VisualStudio2015
Office2016インストール済み
NuGetで、Microsoft.Office.Interop.Wordをインストール済み。

参考にしたページ
https://msdn.microsoft.com/ja-jp/library/ms178792.aspx

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

参考にされたページの Adding a Picture at Run Timeの項を見ると、

this.Application.Selection.InlineShapes.AddPicture(@"C:\SamplePicture.jpg");

とあるので、質問者様のコード
Word.InlineShapes.AddPicture(@"C:\SamplePicture.jpg");

ではなく、以下が正しいかと。(wordインスタンスを使用)

C#

1word.Selection.InlineShapes.AddPicture(@"C:\SamplePicture.jpg"); 2// 確認の為、Saveします。 3word.Documents.Save();

質問者様の環境とは少し異なるかと思いますが、当方の試した環境、
Windows 7(64ビット), Word2013, Visual Studio 2017
では追加した画像ファイルが貼りついたWORDドキュメントファイルが保存されました。

ただ、MSDNのリファレンスもメンテナンスされてないようで、間違った記述っぽく、確かに分かりづらいですね。
Shapes.AddPicture メソッド

投稿2018/03/21 17:38

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MINISIZE

2018/03/22 03:59

ご指摘の通りでした。 当方の環境でも無事に画像を挿入できました。ありがとうございます。
guest

0

C#でWord文書に画像を挿入したいなら、C#で使うコンポーネント、Spire.Doc for .NETをおすすめします。Spire.Docを使用することで、Word文書にあらゆる操作ができます、それで画像を挿入するコードをご紹介します。まずは必要な名前空間です、
using Spire.Doc;
using System.Drawing;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

それからはメソッドです:
//ドキュメントを作成する
Document document = new Document();
Section s = document.AddSection();
Paragraph p = s.AddParagraph();

//画像を挿入しサイズを設定する
DocPicure Pic = p.AppendPicture(Image.FromFile(@"挿入したい画像のパス"));
Pic.Width = 500;
Pic.Height = 500;

//ドキュメントを保存して開く
document.SaveToFile("Image.docx", FileFormat.Docx);
System.Diagnostics.Process.Start("Image.docx");

こうすると画像が順調に挿入されます、すごく便利です。

投稿2021/11/12 01:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Spire.Docを使って見てください。

コードサンプルは以下のようにご覧ください。

Document document = new Document(); Section section = document.AddSection(); Paragraph Imageparagraph = section.AddParagraph(); //画像を挿入。 Image image = Image.FromFile(@"E:\work\Documents\Image\street.jpg"); DocPicture picture =Imageparagraph.AppendPicture(image); //画像のデータを設定。 picture.Height = 360; picture.Width = 525;

投稿2020/11/04 06:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問