Powershell Scripting : Merge Visio Document into word Document using nothing but powershell.

ITguy565
ITguy565 used Ask the Experts™
on
Experts,

I have a need to insert a visio document into a word document programmatically what is the easiest way to do this?

A snippet of my code is as follows:

#Create word Instance
$merged_Object = ""|TitleHeadingBar
$Merged_Object.TitleheadingBar = "Test"
$Word = New-Object -ComObject Word.Application
#Make Word Visible
$Word.Visible = $True
#Create Blank Document
$Document = $Word.Documents.Add()
#Create Selection object
$Selection = $Word.Selection

#Alignment Options:
$Alignment = ""|Select Center,Left,Right
$Alignment.Center = "1"
$Alignment.Left = "0"
$Alignment.Right = "2"

#Create Content
$Selection.ParagraphFormat.Alignment = "$($Alignment.Center)"
$Selection.Font.Bold = 1
$Selection.Font.Italic = 1
$Selection.Font.Underline = 1
$selection.TypeText("$($Merged_Object.TitleHeadingBar))")

Open in new window


I Thought I might be able to do the following, but it fails with


$selection.InsertFile("C:\worddoc\wordmerge\Drawingvsdx.vsdx")

Open in new window


Word has encountered a problem.
At line:1 char:1
+ $selection.InsertFile("C:\worddoc\wordmerge\Drawingvsdx.vsdx")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2008
Commented:
Try
$selection.InlineShapes.AddOLEObject("visio.drawing","C:\worddoc\wordmerge\Drawingvsdx.vsdx")

Open in new window

or if you want the insertion to be linked to the Visio file
$selection.InlineShapes.AddOLEObject("visio.drawing","C:\worddoc\wordmerge\Drawingvsdx.vsdx","True")

Open in new window

Thanks for the answer. It worked more efficiently than what I had come up with..


here was the answer I arrived at:


$visio = new-object -ComObject visio.Application
    $visio.Visible = $False
    $visioDoc = $visio.Documents.open("C:\worddoc\wordmerge\Drawingvsdx.vsdx")

    $pagobj = $visiodoc.Pages
    #$pagobj = $visiodoc.Page

    foreach ($pagobj in $pagobj){
        $ActivePage = $pagobj.Name
        write-host "$activepage"
        $pagobj.shapes.application.ActiveWindow.SelectAll()
        $pagobj.Shapes.application.ActiveWindow.Selection.Copy()
    }
        #Paste Clipboard into word
        $Selection.Paste()

        #Exit Visio Application
        $visio.Application.quit()

        #Insert Page Break
        $selection.InsertBreak()
}

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial