我在 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
谁能解释为什么这不起作用?
最佳答案
问题实际上出在您工作链的上一级。 Begin
是一个读写属性,但 Shape.Characters
是只读的 ( MSDN link )。
虽然您不能直接修改 $shpObj.Characters.Begin
,但您可以这样做:
$chars = $shpObj.Characters
$chars.Begin = 5
然后按照您将要使用 $shpObj.Characters
的方式继续使用 $chars
。
关于vba - 使用 Powershell 在 Visio 中部分格式化文本的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21014255/