使用Powershell在Visio中部分格式化文本的问题

时间:2014-01-09 07:38:28

标签: powershell text formatting visio visio-vba

我在VBA示例中看到,部分格式化Visio形状文本会使用characters.begin和characters.end属性来选择要格式化的文本部分。

现在我在修改我的Powershell脚本方面遇到了问题 - begin属性似乎只读:

[DBG]: PS C:\Windows\system32>>> $visioObjects.($_.key).getType()
IsPublic IsSerial Name         BaseType
-------- -------- ----         --------                  
True     False    ShapeClass                               System.__ComObject
[DBG]: PS C:\Windows\system32>>> $visioObjects.($_.key).Text
Hello World
[DBG]: PS C:\Windows\system32>>> $visioObjects.($_.key).Characters.Begin
0
[DBG]: PS C:\Windows\system32>>> $visioObjects.($_.key).Characters.End
11
[DBG]: PS C:\Windows\system32>>> $visioObjects.($_.key).Characters.CharCount
11
[DBG]: PS C:\Windows\system32>>> $visioObjects.($_.key).Characters.End = 5
[DBG]: PS C:\Windows\system32>>> $visioObjects.($_.key).Characters.End 
11

以下是复制的简称代码:

$appVisio = New-Object -ComObject Visio.Application
$docsObj = $appVisio.Documents
$docObj = $docsObj.Add("")

# Set the active page of the document to page 1
$pagsObj = $appVisio.ActiveDocument.Pages
$pagObj = $pagsObj.Item(1)
$shpObj = $pagObj.DrawRectangle(0, 0, 1, 1)
$shpObj.text = 'Hello World'
$shpObj.Characters.Begin = 5 # <======================== Won't accept
$shpObj.Characters.Begin # <======================== Returns 0, makes me cry

任何人都可以解释为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

问题实际上是你工作地点的一个级别。 Begin是一个读写属性,但Shape.Characters是只读的( MSDN link )。

虽然您无法直接修改$shpObj.Characters.Begin,但可以执行以下操作:

$chars = $shpObj.Characters
$chars.Begin = 5

然后继续按照$chars的方式使用$shpObj.Characters