Для поиска и замены жирным текстом я пытаюсь преобразовать свою подпрограмму VBA в функцию VSTO C #.
Простой перевод с VB на C # ничего не заменяет (вероятно, потому что текст поиска и текст замены)должны быть переданы как параметры в вызов Execute и не выбираются из параметров «oPara.Range.Find». Модификация для предоставления именованных параметров заменяет текст, но, похоже, не имеет способа сделать замененный текст«Жирный». Что особенного делает VB? Как этого добиться в C #? Настройка параметров «oPara.Range.Find» кажется бесполезной для C #
. Я уже пробовалкод ниже. Второй вызов Execute в C #, работает, но тогда я не могу сделать замененный текст BOLD .
Sub ReplaceWithBoldInVBA()
Dim oPara As Object
Set oPara = Selection.Paragraphs(1)
oPara.Range.Select
Dim bFound As Boolean
With oPara.Range.Find
.ClearFormatting
.Text = "Test- "
.Replacement.Text = "Test: "
.Replacement.ClearFormatting
.Replacement.Font.Bold = True
.Replacement.Font.Italic = False
.Replacement.Font.Underline = False
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute(Replace:=wdReplaceOne)
End With
End Sub
// Following is the VSTO Add-In C# code
using Word = Microsoft.Office.Interop.Word;
public void ReplaceWithBoldIn_VSTO_AddIn_CSharp() {
Word.Paragraph oPara = Globals.ThisAddIn.Application.Selection.Paragraphs[1];
oPara.Range.Select();
oPara.Range.Find.ClearFormatting();
oPara.Range.Find.Text = "Test- ";
oPara.Range.Find.Replacement.Text = "Test: ";
oPara.Range.Find.Replacement.ClearFormatting();
oPara.Range.Find.Replacement.Font.Bold = -1;
oPara.Range.Find.Replacement.Font.Italic = 0;
oPara.Range.Find.Replacement.Font.Underline = 0;
oPara.Range.Find.Forward = true;
oPara.Range.Find.Wrap = Word.WdFindWrap.wdFindStop;
oPara.Range.Find.Format = true;
oPara.Range.Find.MatchCase = true;
oPara.Range.Find.MatchWholeWord = false;
oPara.Range.Find.MatchWildcards = false;
oPara.Range.Find.MatchSoundsLike = false;
oPara.Range.Find.MatchAllWordForms = false;
oPara.Range.Find.Execute(Replace: Word.WdReplace.wdReplaceOne);
// The following Execute call works but then I can not make the replaced text **BOLD**.
oPara.Range.Find.Execute(FindText: "Test- ", ReplaceWith: "Test: ", Replace: Word.WdReplace.wdReplaceOne)
}