首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell + Visio创建乌鸦巢图?

Powershell + Visio创建乌鸦巢图?
EN

Stack Overflow用户
提问于 2016-04-14 21:54:47
回答 1查看 617关注 0票数 2

我正在尝试使用powershell在Visio 2013中以语法的方式生成Crow的脚部数据库图。

在将实体形状添加到绘图中之后,我正在讨论如何向实体形状添加属性。

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

代码语言:javascript
复制
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个属性。我尝试过一些非常基本的东西,比如:

代码语言:javascript
复制
$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中以语法方式向实体添加属性?

注释:“属性”和“实体”指的是包含在“乌鸦脚数据库符号”模板中的形状。

下面是为其他人提供参考的最后代码:

代码语言:javascript
复制
$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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 23:47:41

我还没有处理实体和属性,但是根据宏(这是在Visio中以编程方式解决问题的最佳方法),这似乎是一种方法:

代码语言:javascript
复制
$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
}

这对我来说很好,但这些属性从下到上都有编号。我想这应该很容易解决。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36634685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档