Я создаю небольшой проект, который редактирует текст, таблицы и графики в Word на моей работе.Используя openXML, я бы заменил текст, покрытый закладкой.
Я не знаю, есть ли у вас изоляция элемента bookmarkStart
, поэтому я включил и это.
Сначала код для захвата bookmarkStart
:
Dictionary<String,BookmarkStart> bookMap = new Dictionary<String, BookmarkStart>(); //a dictionary so we can lookup a bookmarkStart with it's name
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open("MyWordDocument.docx", true))
{
var mainPart = wordDoc.MainDocumentPart; //get mainpart
var bookmarks = mainPart.Document.Body.Descendants<BookmarkStart>(); //get all bookmarks
foreach (BookmarkStart bookmarkStart in bookmarks) //save them to dictionary
{
bookMap[bookmarkStart.Name] = bookmarkStart;
}
ReplaceInBookmark(bookmark["myBookmark"],"text to insert");
}
Затем заменяющая часть:
public void ReplaceInBookmark(BookmarkStart bookmarkStart, string text)
{
OpenXmlElement elem = bookmarkStart.NextSibling();
while (elem != null && !(elem is BookmarkEnd))
{
OpenXmlElement nextElem = elem.NextSibling();
elem.Remove();
elem = nextElem;
}
bookmarkStart.Parent.InsertAfter<Run>(new Run(new Text(text)), bookmarkStart);
}
Это, я думаю, должно сработать.Но это копировальная паста с некоторыми небольшими изменениями кода, которую я сейчас не могу проверить, поэтому могут присутствовать ошибки / ошибки.
Если вы хотите удалить закладку и ее содержимое (не заменяяэто), вы можете попытаться отправить пустую строку или внести небольшое изменение в метод.Этот в основном удаляет все элементы, а затем вставляет новый прогон с указанным текстом.
Удачи!