I was looking some way to update TOC after generating the word document from template, but I came to know that there are no way we can update the TOC as we do in MS Word design time (Update Table). I found couple of articles saying you can create complete TOC runtime and this will work like a update TOC. You can see this example here http://openxmldeveloper.org/forums/thread/4680.aspx But somehow I did not feel comfortable with this solution and also it does not works for me, may I could have spent much time on it. Anyway I found simple solution for my requirement, my requirement was, I have predefined TOC on the word Template Like below And now based on the heading deleted on the document I have to delete the same items from TOC, for that I can simply query TOC and delete it. Name Space using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; C# Code //This is hard coded variable to show only one item remove, but you can make function and make it generic for any items in TOC string TOCItems = "Introduction"; //System.Xml.Linq.XElement TOC = null; OpenXmlElement blocks = mainPart.Document.Descendants<DocPartGallery>() .Where(p => p.Val.HasValue && (p.Val.Value == "Table of Contents")).FirstOrDefault(); if (blocks != null) { while ((blocks != null) && !(blocks is SdtBlock)) { blocks = blocks.Parent; } // This line you can use if you // need complete TOC from document //TOC = new System.Xml.Linq.XElement("TOC", blocks.OuterXml); } var b = blocks.Descendants<Hyperlink>(); foreach (Hyperlink block in b) { if (block.InnerText.Contains(TOCItems) == true) { // This block only to make sure this should not // be the first element in TOC if (tocName == "Executive Summary") { // This code will delete the item from // TOC without Space block.Remove(); } else { // This code will delete the item from // TOC with space block.Parent.Remove(); } } } Reference: |
Monday, April 04, 2011
How to delete items from Table of Content (TOC) by using Open XML SDK 2.0
Subscribe to:
Posts (Atom)