【问题标题】:Powershell + Visio Creating a Crow's nest diagram?Powershell + Visio 创建乌鸦巢图?
【发布时间】:2016-04-14 21:54:47
【问题描述】:

我正在尝试使用 powershell 在 Visio 2013 中以编程方式生成鱼尾纹数据库图。

在将实体形状添加到绘图后,我对如何向实体形状添加属性感到困惑。

这是我到目前为止所想出的。它打开 Visio 并将一个实体添加到绘图中,然后命名该实体。这一切都有效。

clear-host
$visio = New-Object -ComObject Visio.Application 
$docs = $visio.Documents
$doc = $docs.Add("Basic Diagram.vst") # use basic template 
$pages = $visio.ActiveDocument.Pages # set active page 
$page = $pages.Item(1)
$DBCrowStencil = "C:\Program Files (x86)\Microsoft Office\Office15\Visio Content\1033\DBCROW_U.vssx" # Add the crow's foot notation stencils.
$stencil = $visio.Documents.Add($DBCrowStencil)
$EntityShape = $stencil.Masters.Item("Entity") 
$AttributeShape = $stencil.Masters.Item("Attribute") 
$shape1 = $page.Drop($EntityShape, 2, 8) 
$shape1.Text = "Table Name"

问题是实体添加了 0 个属性。我尝试了一些非常基本的方法,例如:

$x = 1
$y = 0.3
$Increment = 0.5
For ($i=1; $i -lt 5; $i++)  {
    $shape1.Drop($AttributeShape, $x, $y)
    $shape1.Text = ("Col Name " + $i)
    $y = $y - $Increment
}

这在技术上有效。属性被添加并绑定到实体,但实体不会重新调整大小以封装所有属性。我无法调整实体的大小,因为它受到保护,当我通过 Visio GUI 手动向实体添加属性时,当我将属性拖放到实体上时,实体会自动调整大小。这让我相信 .Drop() 不是向实体添加属性的合适方法,但我不知道这样做的正确方法是什么。

如何以编程方式向 Visio 中的实体添加属性?

注意:“属性”和“实体”是指“鱼尾纹数据库符号”模具中包含的 Visio 形状。

这是供其他人参考的最终代码:

$visio = New-Object -ComObject Visio.Application 
$docs = $visio.Documents
$doc = $docs.Add("Basic Diagram.vst") # use basic template 
$pages = $visio.ActiveDocument.Pages # set active page 
$page = $pages.Item(1)
$DBCrowStencil = "C:\Program Files (x86)\Microsoft Office\Office15\Visio Content\1033\DBCROW_U.vssx" # Add the crow's foot notation stencils.
$stencil = $visio.Documents.Add($DBCrowStencil)
$EntityShape = $stencil.Masters.Item("Entity") 
$AttributeShape = $stencil.Masters.Item("Attribute") 
$shape1 = $page.Drop($EntityShape, 2, 8) 
$shape1.Text = "Table Name"

For ($i=1; $i -lt 5; $i++)  {
    $attr = $page.DropIntoList($AttributeShape, $shape1, $i)
    $attr.Text = ("Col Name " + $i)
}

【问题讨论】:

    标签: database powershell visio


    【解决方案1】:

    我没有弄乱实体和属性,但根据宏(这是弄清楚如何在 Visio 中以编程方式做事的最佳方法),这似乎是方法:

    $x = 1
    $y = 0.3
    $Increment = 0.5
    For ($i=1; $i -lt 5; $i++)  {
        $attr=  $page.DropIntoList($AttributeShape,$shape1,1)
        $attr.Text = ("Col Name " + $i)
        $y = $y - $Increment
    }
    

    对我来说效果很好,但是属性是从下到上编号的。我认为这应该很容易解决。

    【讨论】:

    • 谢谢! DropIntoList 方法的最后一个参数是您要在列表中删除它的位置。由于您硬编码 1,它会将每个新项目放在列表的第一个位置。我只是更新了代码以使用 $i 变量,它以正确的顺序删除了所有内容: $attr= $page.DropIntoList($AttributeShape,$shape1,$i)
    • 太棒了。我可能应该查一下,但它很接近。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2012-06-05
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多