我在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
任何人都可以解释为什么这不起作用?
答案 0 :(得分:2)
问题实际上是你工作地点的一个级别。 Begin
是一个读写属性,但Shape.Characters
是只读的( MSDN link )。
虽然您无法直接修改$shpObj.Characters.Begin
,但可以执行以下操作:
$chars = $shpObj.Characters
$chars.Begin = 5
然后继续按照$chars
的方式使用$shpObj.Characters
。