Database Powershell+;Visio创建Crow';s嵌套图?

Database Powershell+;Visio创建Crow';s嵌套图?,database,powershell,visio,Database,Powershell,Visio,我正在尝试使用powershell在Visio 2013中按语法生成鱼尾纹数据库图 在将实体形状添加到图形中之后,如何将属性添加到实体形状中,这让我有些困惑 这就是我到目前为止想到的。它将打开Visio并向图形中添加一个图元,然后命名该图元。这一切都有效 clear-host $visio = New-Object -ComObject Visio.Application $docs = $visio.Documents $doc = $docs.Add("Basic Diagram.vst"

我正在尝试使用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中以编程方式进行操作的最佳方法),这似乎是一种方法:

$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)太棒了。我可能应该查一下,但很接近。:-)
$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
}