Замена текста в Visio, но продолжайте форматирование
Как я могу программно заменить текст в Visio 2013 макросом или надстройкой C#? Я попробовал это:
Sub Replace_text()
For Each o In Application.ActiveWindow.Selection
o.Text = Replace(o.Text, "123", "234")
Next
End Sub
Но форматирование потеряно, т.е. перед заменой у меня это
ааа 123 ббб
но после:
ааа 234 ббб
Я понимаю, что текст не является подходящим свойством для использования, мне нужно что-то вроде "GetFormattedText" или "GetTextAsHtml" или "GetRichText".
Какие-либо предложения?
(Делать это не программно, по Ctrl+H, не вариант... У меня много документов, и мне нужно заменить много разных строк одновременно, и это не разовая задача).
1 ответ
Возможно, вам удастся обойтись без этого, не делая ничего слишком сумасшедшего, потому что, когда текст фигуры частично отформатирован подобным образом, 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"
Если вы не можете предположить, что заменяемый текст имеет одинаковое форматирование для этого небольшого фрагмента текста, то сначала вам нужно будет увидеть, содержит ли текст формы вашу строку, и если это так, вам нужно будет найти прогоны, которые инкапсулируют текст, а затем заменяют текст внутри этих прогонов.