C# Open XML разбивается на отдельные слова

Я использую Open XML для обработки текста в документе Word. Я пытаюсь разделить определенные серии на отдельные слова (разделенные пробелами) ТОЛЬКО для дальнейшей обработки, если текст соответствует ключевым словам.

 foreach (var text in run.Elements<Text>()){
     string t1 = text.Text; 
     if (t1.Contains("keyWord"))
     {
      // I need to split the run here so that I have 1 run per word so that I can
      // Process the runs individually (and add bookmarks if additional conditions are met   

     }
  }

Есть ли простой способ разделить трассы таким образом? Я не мог найти ничего простого.

1 ответ

Это сработало для меня, хотя я не очень понимаю, почему вы бы разбили слова на отдельные прогоны.

using (var wordDoc = WordprocessingDocument.Open(@"c:\test\test.docx", true))
{
    MainDocumentPart mainPart = wordDoc.MainDocumentPart;

    var runs = mainPart.Document.Descendants<Run>().ToList();

    foreach (Run run in runs)
    {
        var text = run.GetFirstChild<Text>();
        if(text.Text.Contains("KEYWORD"))
        {
            string[] words = text.Text.Split(' ');
            for(int i = 0; i < words.Count(); i++)
            {
                string word = words[i];
                var newRun = (Run)run.Clone();
                string newWord = word + (i < words.Count() ? " " : "");
                Text newRunText = newRun.GetFirstChild<Text>();
                newRunText.Space = SpaceProcessingModeValues.Preserve;
                newRunText.Text = newWord;
                run.Parent.InsertBefore(newRun, run);
            }
            run.Remove();
        }
    }
}

Он работает, проверяя текстовый элемент Run для вашего ключевого слова, разбивая предложение на отдельные слова и клонируя Run, и заменяет текст одним словом. Затем вставьте новый прогон перед старым прогоном, а когда закончите, удалите старый прогон. Мне пришлось добавить SpaceProcessingModeValue, чтобы сохранить место в тесте, которое я сделал с простым документом.docx, содержащим предложение "Это поиск по слову KEYWORD"

Надеюсь, поможет.

Другие вопросы по тегам