Avatar of ITguy565
ITguy565
Flag 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
PowershellMicrosoft VisioScripting LanguagesMicrosoft Word

Avatar of undefined
Last Comment
ITguy565

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
irudyk

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
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()
}
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck