Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 替换Visio中的文本,但保留格式_C#_Vba_Visio - Fatal编程技术网

C# 替换Visio中的文本,但保留格式

C# 替换Visio中的文本,但保留格式,c#,vba,visio,C#,Vba,Visio,如何用宏或C#addin以编程方式替换Visio 2013中的某些文本? 我试过这个: Sub Replace_text() For Each o In Application.ActiveWindow.Selection o.Text = Replace(o.Text, "123", "234") Next End Sub 但格式已丢失,即在替换之前,我有此 aaa123bbb 但在: aaa 234 bbb 我明白文本不是正确的属性 我需要像“GetFormattedText”或“GetT

如何用宏或C#addin以编程方式替换Visio 2013中的某些文本? 我试过这个:

Sub Replace_text()
For Each o In Application.ActiveWindow.Selection
o.Text = Replace(o.Text, "123", "234")
Next
End Sub
但格式已丢失,即在替换之前,我有此

aaa123bbb

但在:

aaa 234 bbb

我明白文本不是正确的属性 我需要像“GetFormattedText”或“GetTextAsHtml”或“GetRichText”这样的东西

有什么建议吗

(按Ctrl+H键执行此非编程操作不是一个选项。。。
我有许多文档,我需要一次替换许多不同的字符串,这不是一次性任务)。

您可能不必做任何疯狂的事情就可以解决这个问题,因为当形状的文本部分格式化为那样时,Visio会使用字符运行来存储格式化

从我自己的理解中,Visio似乎将文本存储在类似格式的块中,称为运行,因此每个运行都有一个文本值和一组字符属性

因此,在您的情况下,如果您可以假设正在查找的文本(即“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"
如果您不能假定要替换的文本具有与该小文本块相同的格式,则必须首先查看形状文本是否包含字符串,如果包含字符串,则必须找到封装文本的运行,然后替换这些运行中的文本