public static void ReplaceAndSave(string filenameSource, string filenameDestination, string bookmarkName, string value) { var templateFile = new FileInfo(filenameSource); if (templateFile.Exists) { var tempFile = templateFile.CopyTo(Path.GetTempFileName(), true); using (var documentStream = tempFile.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) { using (var document = WordprocessingDocument.Open(documentStream, true)) { var bookmarks = GetBookmarks(document.MainDocumentPart, ""); BookmarksPair pair = bookmarks.FirstOrDefault(x => x.Start.Name == bookmarkName); if (pair != null) { ReplaceBookmarkContent(pair, value); } } } tempFile.MoveTo(filenameDestination); } }
private static void ReplaceBookmarkContent(BookmarksPair bookmarksPair, string value) { CleanContentBetweenBookmarks(bookmarksPair); Run run = new Run(new Text(value)); bookmarksPair.Start.InsertAfterSelf(run); }
private static void CleanContentBetweenBookmarks(BookmarksPair bookmarksPair) { List <OpenXmlElement> elements = new List <OpenXmlElement>(); OpenXmlElement element = bookmarksPair.Start.NextSibling(); while (element != null) { if (element == bookmarksPair.End) { break; } elements.Add(element); element = element.NextSibling(); } foreach (var item in elements) { item.Remove(); } }