evidenziando il testo in Docx usando c #

Ho bisogno di evidenziare una frase nel file docx, ho questo codice e funziona bene per molti documenti, ma ho notato che per alcuni documenti il ​​testo all’interno del documento è impostato parola per parola, non intere frasi, intendo ogni parola con proprio Run, quindi quando si cerca quella frase, non viene trovata perché è parola per parola nel docx. NOTA: sto lavorando con il testo arabo.

private void HighLightText_userSentence(Paragraph paragraph, string text, string title, string author, decimal percentage, string _color) { string textOfRun = string.Empty; var runCollection = paragraph.Descendants(); Run runAfter = null; //find the run part which contains the characters foreach (Run run in runCollection) { if (run.GetFirstChild() != null) { textOfRun = run.GetFirstChild().Text.Trim(); if (textOfRun.Contains(text)) { //remove the character from thsi run part run.GetFirstChild().Text = textOfRun.Replace(text, ""); runAfter = run; break; } } } // create a new run with your customization font and the character as its text Run HighLightRun = new Run(); RunProperties runPro = new RunProperties(); RunFonts runFont = new RunFonts() { Ascii = "Curlz MT", HighAnsi = "Curlz MT" }; Bold bold = new Bold(); DocumentFormat.OpenXml.Wordprocessing.Color color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = _color }; DocumentFormat.OpenXml.Wordprocessing.FontSize fontSize = new DocumentFormat.OpenXml.Wordprocessing.FontSize() { Val = "22" }; FontSizeComplexScript fontSizeComplex = new FontSizeComplexScript() { Val = "24" }; Text runText = new Text() { Text = text }; //runPro.Append(runFont); runPro.Append(bold); runPro.Append(color); //runPro.Append(fontSize); // runPro.Append(fontSizeComplex); HighLightRun.Append(runPro); HighLightRun.Append(runText); //HighLightRun.AppendChild(new Break()); //HighLightRun.PrependChild(new Break()); //insert the new created run part paragraph.InsertBefore(HighLightRun, runAfter); } 

Recentemente ho usato docX e ho riscontrato problemi con la ricerca e il testo higlighting. Ho provato un modo indiretto. È semplice e funziona nella maggior parte delle situazioni. Lo faccio usando la dichiarazione di sostituzione. qui cerca testo è il testo che vuoi evidenziare

  using (DocX doc = DocX.Load("d:\\Sample.docx")) { for (int i = 0; i < doc.Paragraphs.Count; i++) { foreach (var item in doc.Paragraphs[i]) { if (doc.Paragraphs[i] is Paragraph) { Paragraph sen = doc.Paragraphs[i] as Paragraph; Formatting form = new Formatting(); form.Highlight = Highlight.yellow; form.Bold = true; sen.ReplaceText(searchText, searchText, false, System.Text.RegularExpressions.RegexOptions.IgnoreCase, form, null, MatchFormattingOptions.ExactMatch); } } } doc.Save(); }