예제 #1
0
        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);
            }
        }
예제 #2
0
        private static void ReplaceBookmarkContent(BookmarksPair bookmarksPair, string value)
        {
            CleanContentBetweenBookmarks(bookmarksPair);

            Run run = new Run(new Text(value));

            bookmarksPair.Start.InsertAfterSelf(run);
        }
예제 #3
0
        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();
            }
        }