none
既存のWORD文書を開いて、その中の図をクリップボードにコピーしたい RRS feed

  • 質問

  • すでに作成されたWORD文書(WORD2016)をプログラム上で開いて、文書中の図形をコピーし、フォーム上のPictureBoxに貼り付けたいと考えています。

    WORDを開くまでは出来たのですが図形をコピーする部分がわかりません。

    一応WORD上でのマクロを記録し、似たようなコード入れてみましたが例外は発生してしまいます。

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Dim wdApp As New Word.Application()
            Dim wdDoc As Word.Document = Nothing
    
            Try
    
                wdDoc = wdApp.Documents.Open("C:\test.doc")
    
                '☆ここで指定した図形をクリップボードにコピーしたい
    
    
                Dim data As IDataObject = Clipboard.GetDataObject()
                'クリップボードにデータがあるか調べる
                If Not data Is Nothing Then
                    '拡張メタファイル形式でデータを取得する
                    PictureBox1.Image = DirectCast(data.GetData(DataFormats.EnhancedMetafile), Image)
                End If
    
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Err", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Finally
                wdDoc.Close()
                wdApp.Quit()
            End Try
    
        End Sub
    

    参考になるサイトなどでも構いませんのでご教授願います。

    2019年9月3日 5:52

回答

  • Dreizehnさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    WORD文書内の図をクリップボード経由でPictureBoxにコピーできます。私のコードを試してください。

    Imports System.Text
    
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim reportContent As StringBuilder = New StringBuilder()
            Dim filename As Object = "D:\test.docx"
            Dim WordApp As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application()
            Dim WordDoc As Microsoft.Office.Interop.Word.Document = WordApp.Documents.Open(filename)
            For Each item As Microsoft.Office.Interop.Word.Paragraph In WordDoc.Paragraphs
    
                If item IsNot Nothing Then
    
                    If item.Range.Text.Trim() <> "" Then
    
                        If item.Range.InlineShapes.Count <> 0 Then
    
                            For Each shape As Microsoft.Office.Interop.Word.InlineShape In item.Range.InlineShapes
    
                                If shape.Type = Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture Then
                                    shape.Select()
                                    WordApp.Selection.Copy()
    
                                    If Clipboard.ContainsImage() Then
                                        Dim bmp As Bitmap = New Bitmap(Clipboard.GetImage())
    
                                        PictureBox1.Image = bmp
                                    End If
                                End If
                            Next
                        End If
    
                        reportContent.AppendLine(item.Range.Text.Trim())
                    End If
                End If
            Next
            WordDoc.Close()
            WordApp.Quit()
        End Sub
    End Class
    

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク Dreizehn 2019年9月10日 7:46
    2019年9月10日 1:33
    モデレータ

すべての返信

  • Dreizehnさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    詳細な状況をご提供いただきありがとうございます。その後のご状況いかがでしょうか。
    追加でご確認いただいたことなどあれば、追記いただくことで回答がつきやすくなります。

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年9月5日 2:24
    モデレータ
  • Dreizehnさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    WORD文書内の図をクリップボード経由でPictureBoxにコピーできます。私のコードを試してください。

    Imports System.Text
    
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim reportContent As StringBuilder = New StringBuilder()
            Dim filename As Object = "D:\test.docx"
            Dim WordApp As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application()
            Dim WordDoc As Microsoft.Office.Interop.Word.Document = WordApp.Documents.Open(filename)
            For Each item As Microsoft.Office.Interop.Word.Paragraph In WordDoc.Paragraphs
    
                If item IsNot Nothing Then
    
                    If item.Range.Text.Trim() <> "" Then
    
                        If item.Range.InlineShapes.Count <> 0 Then
    
                            For Each shape As Microsoft.Office.Interop.Word.InlineShape In item.Range.InlineShapes
    
                                If shape.Type = Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture Then
                                    shape.Select()
                                    WordApp.Selection.Copy()
    
                                    If Clipboard.ContainsImage() Then
                                        Dim bmp As Bitmap = New Bitmap(Clipboard.GetImage())
    
                                        PictureBox1.Image = bmp
                                    End If
                                End If
                            Next
                        End If
    
                        reportContent.AppendLine(item.Range.Text.Trim())
                    End If
                End If
            Next
            WordDoc.Close()
            WordApp.Quit()
        End Sub
    End Class
    

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク Dreizehn 2019年9月10日 7:46
    2019年9月10日 1:33
    モデレータ
  • 回答ありがとうございました。

    提示されたコードのなんとかなりそうです。

    ありがとうございました。

    2019年9月10日 7:46