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"
Надеюсь, поможет.