替换Visio中的文本但保持格式

时间:2014-09-12 13:37:05

标签: c# vba visio

如何通过宏或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执行非程序设计,不是一个选项...... 我有很多文档,我需要一次更换许多不同的字符串,这不是一次性任务)

1 个答案:

答案 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"

如果你不能认为你要替换的文本对于那一小块文本具有相同的格式,那么你必须首先看看形状文本是否包含你的字符串,如果你有,你会有找到封装文本的运行,然后替换这些运行中的文本。