Hello,
I have a Word template that has a starting Bookmark, then a bunch of text, paragraphs, etc., and then an ending Bookmark.
I want to delete everything between the two bookmarks. What is the best way of doing this? Please provide me with an example that starts with the first bookmark, then examines all the nodes in between the two bookmarks (removing them if necessary) and stops at the last bookmark.
Thanks!
Hi
Thanks for your inquiry. You can try using the following code to achieve this.
Document doc = new Document(@"Test138\in.doc");
// Get start node
Node startNode = doc.Range.Bookmarks["start"].BookmarkEnd;
// Get End node
Node endNode = doc.Range.Bookmarks["end"].BookmarkStart;
Node curNode = startNode.NextPreOrder(doc);
while (curNode != null)
{
if (curNode.Equals(endNode))
break;
// move to next node
Node nextNode = curNode.NextPreOrder(doc);
// Check whether current contains end node
if (curNode.IsComposite)
{
if (!(curNode as CompositeNode).ChildNodes.Contains(endNode) &&
!(curNode as CompositeNode).ChildNodes.Contains(startNode))
{
nextNode = curNode.NextSibling;
curNode.Remove();
}
}
else
{
curNode.Remove();
}
curNode = nextNode;
}
// Save output document
doc.Save(@"Test138\out.doc");
Please let me know in case of any issues. Also please attach your document for testing.
Best regards.
Hello
I have tried the code above, and it works great until you put a section-break in between the two bookmarks in the document.
Can you please change the code to handle sections-breaks as well
I have attached a test document where I want to delete everything between BB__KUNDE_MED_CPR and BS__KUNDE_MED_CPR
Best regards
Ole Kirkholt
Hi
Thanks for your inquiry. Please try using the following code:
Document doc = new Document(@"C:\Temp\Gruppeliv-ny-4.dot");
// Get start node
Node startNode = doc.Range.Bookmarks["BB__KUNDE_MED_CPR"].BookmarkEnd;
// Get End node
Node endNode = doc.Range.Bookmarks["BS__KUNDE_MED_CPR"].BookmarkStart;
Node curNode = startNode.NextPreOrder(doc);
while (curNode != null)
{
if (curNode.Equals(endNode))
break;
// move to next node
Node nextNode = curNode.NextPreOrder(doc);
// Check whether current contains end node
if (curNode.IsComposite)
{
if (!(curNode as CompositeNode).ChildNodes.Contains(endNode) &&
!(curNode as CompositeNode).ChildNodes.Contains(startNode))
{
// If there current node is end of section
// We should append content of the next section to curretn Sestion
if (curNode.NextSibling == null)
{
// Get current Section
Section curSect = (Section)curNode.GetAncestor(NodeType.Section);
if (curSect.NextSibling != null)
{
curSect.AppendContent((Section)curSect.NextSibling);
// remove next section
curSect.NextSibling.Remove();
// Reassign endNode
endNode = doc.Range.Bookmarks["BS__KUNDE_MED_CPR"].BookmarkStart;
}
}
nextNode = curNode.NextSibling;
curNode.Remove();
}
}
else
{
curNode.Remove();
}
curNode = nextNode;
}
// Save output document
doc.Save(@"C:\Temp\out.doc");
Hope this helps.
Best regards.