如何通过宏或C#插件在Visio 2013中以编程方式替换某些文本? 我试过这个:
Sub Replace_text()
For Each o In Application.ActiveWindow.Selection
o.Text = Replace(o.Text, "123", "234")
Next
End Sub
但是格式化已经丢失,即在替换之前我有这个
aaa 123 bbb
但是之后:
aaa 234 bbb
我明白Text不是正确的属性 我需要像" GetFormattedText"或" GetTextAsHtml"或" GetRichText"。
有什么建议吗?
(通过Ctrl + H执行非程序设计,不是一个选项...... 我有很多文档,我需要一次更换许多不同的字符串,这不是一次性任务)。
答案 0 :(得分:1)
你可以在不必做任何过于疯狂的事情的情况下逃脱这一点,因为当形状的文本部分格式化时,Visio会存储使用字符运行的格式。
根据我自己解决的问题,Visio似乎将文本存储在类似格式的块中,称为Run,因此每个Run都有一个Text值和一组字符属性。
所以在你的情况下,如果你可以假设你找到的文本(即“123”)将始终具有相同的格式,那么你应该能够找到你要替换的字符串的索引(使用InStr),然后做这样的事情:
Dim Chars as Visio.Characters
Set Chars = o.Characters
Chars.Begin = instr( 1 , o.Text , "123" )
Chars.End = Chars.Begin + Len( "123" )
Chars.Text = "234"
如果你不能认为你要替换的文本对于那一小块文本具有相同的格式,那么你必须首先看看形状文本是否包含你的字符串,如果你有,你会有找到封装文本的运行,然后替换这些运行中的文本。