2013-02-06 45 views
2

我有一個自動的Visio圖表的腳本,我根據我的官方辦公室網站腳本:http://gallery.technet.microsoft.com/office/f77fb025-11ee-48f3-8409-9bb567a63fc3的Visio自動化通過PowerShell的

嗯,老實說我不知道​​如何檢索「形狀的值數據「,這個形狀數據例如(序列號,建築物,位置等等)來自pc模板。 我想以編程方式添加和修改這個值,我檢查了對象模型的參考,但沒有運氣。

有人可以幫助我嗎?

這裏是代碼,它打開一個visio文檔並在繪圖中添加一個pc模具。

$application = New-Object -ComObject Visio.Application 
$application.visible = $true 
$documents = $application.Documents 
$document = $documents.Add("Basic Network Diagram.vst") 
$pages = $application.ActiveDocument.Pages 
$page = $pages.Item(1) 


$ComputerStencil = $application.Documents.Add("Computers and Monitors.vss") 



$pc = $ComputerStencil.Masters.Item("PC") 
$shape1 = $page.Drop($pc, 2.2, 6.8) 
$shape1.Text = "Some text...." 

Thanxs爲您的時間!

回答

3

Visio Automation library可以幫助你:

下面是如何在C#中使用它的一個例子。在PowerShell中使用它不應該很困難。

var app = new IVisio.Application(); 
var doc = app.Documents.Add(""); 
var page = doc.Pages[1]; 
var shape1 = page.DrawRectangle(1, 1, 3, 4); 
VisioAutomation.CustomProperties.CustomPropertyHelper.Set(shape1,"Hello","World"); 
var props = VisioAutomation.CustomProperties.CustomPropertyHelper.Get(shape1); 

使用Visio PowerShell Module,代碼將是這個樣子:

Import-Module VisioPS 
$app= New-VisioApplication 
$doc = New-VisioDocument 
$stencil_net = Open-VisioStencil "Basic Network Diagram.vst" 
$stencil_comp = Open-VisioStencil "Computers and Monitors.vss" 

$pc_master = Get-VisioMaster -Master "PC" -Stencil $stencil_comp 

$shapes = New-VisioShape -Masters $pc_master -Points 2.2,6.8 
$shape1 = $shapes[0] 

Select-VisioShape -Shapes $shape1 
$shape1.Text = "Some Text..." 

Set-VisioCustomProperty -Name "prop1" -Value "val1" 
Set-VisioCustomProperty -Name "prop2" -Value "val2" 

$shapedata = Get-VisioCustomProperty 

$props_for_shape1 = $shapedata[ $shape1] 

foreach ($propname in $props_for_shape1.Keys) 
{ 
    $custompropcells = $props_for_shape1[ $propname ] 
    Write-Host $propname = $custompropcells.Value.Formula 
} 

在你可以看到如何設置和檢索形狀數據的底部。

+0

非常感謝!在開始時,我在導入VisioPS模塊時遇到了一些錯誤,然後升級到了PowerShell 3.0並解決了問題。現在我可以設置這些值,但我無法獲得實際值,請閱讀文檔[link](https://skydrive.live.com/?cid=1ff099edb1c7ebfa&id=1FF099EDB1C7EBFA!37017&authkey=!AC3a8aNj0Lc8318# !/view.aspx?cid = 1FF099EDB1C7EBFA&resid = 1FF099EDB1C7EBFA!1407&app = Word&authkey =!AC3a8aNj0Lc8318),但Get-VisioCustomProperty的輸出完全不同。這裏是輸出 –

+0

'PS C:\ Program Files文件(x86)的\微軟的Visual Studio 10.0 \ Common7 \ IDE> $ shapedata.get_Values() KEYVALUE --- ---- 廠商VisioAutomation.CustomProperties.CustomPropertyCells' –

+0

我會盡快更新文檔。 總結:Get-VisioCustomProperty cmdlet返回一個字典映射shape-object - >該形狀屬性的字典。 這個二級字典是一個簡單的字符串 - >自定義屬性單元格映射 – saveenr

0

您也可以將圖形導出爲html,然後解析生成的data.xml。