Powershell + Visio создание диаграммы Вороньего Гнезда?
Я пытаюсь грамотно сгенерировать диаграмму базы данных "гусиная лапка" в Visio 2013 с помощью powershell.
Я зацикливаюсь на том, как я добавляю атрибуты к форме сущности после добавления формы сущности к чертежу.
Это то, что я придумал до сих пор. Он открывает 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 OfficeOffice15Visio Content1033DBCROW_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, сущность автоматически изменяется, когда я перетаскиваю атрибут на нее. Это заставляет меня поверить в это .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 OfficeOffice15Visio Content1033DBCROW_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)
}
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 }
Для меня это работало нормально, но атрибуты были пронумерованы снизу вверх. Думаю, это будет легко исправить.