Link to home
Start Free TrialLog in
Avatar of ITguy565
ITguy565Flag for United States of America

asked on

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

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
ASKER CERTIFIED SOLUTION
Avatar of irudyk
irudyk
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of ITguy565

ASKER

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()
}