コード例 #1
0
        protected SdtElement CloneElementAndSetContentInPlaceholders(OpenXmlElementDataContext openXmlElementDataContext)
        {
            if (openXmlElementDataContext == null)
            {
                throw new ArgumentNullException("openXmlElementDataContext");
            }

            if (openXmlElementDataContext.Element == null)
            {
                throw new ArgumentNullException("openXmlElementDataContext.element");
            }

            SdtElement clonedSdtElement = null;

            if (openXmlElementDataContext.Element.Parent != null && openXmlElementDataContext.Element.Parent is Paragraph)
            {
                Paragraph clonedPara = openXmlElementDataContext.Element.Parent.InsertBeforeSelf(openXmlElementDataContext.Element.Parent.CloneNode(true) as Paragraph);
                clonedSdtElement = clonedPara.Descendants <SdtElement>().First();
            }
            else
            {
                clonedSdtElement = openXmlElementDataContext.Element.InsertBeforeSelf(openXmlElementDataContext.Element.CloneNode(true) as SdtElement);
            }

            foreach (var v in clonedSdtElement.Elements())
            {
                this.SetContentInPlaceholders(new OpenXmlElementDataContext()
                {
                    Element = v, DataContext = openXmlElementDataContext.DataContext
                });
            }

            return(clonedSdtElement);
        }
コード例 #2
0
        private void OnPlaceHolderFound(OpenXmlElementDataContext openXmlElementDataContext)
        {
            string     templateTagPart = string.Empty;
            string     tagGuidPart     = string.Empty;
            SdtElement element         = openXmlElementDataContext.Element as SdtElement;

            GetTagValue(element, out templateTagPart, out tagGuidPart);

            if (this.generationInfo.PlaceHolderTagToTypeCollection.ContainsKey(templateTagPart))
            {
                switch (this.generationInfo.PlaceHolderTagToTypeCollection[templateTagPart])
                {
                case PlaceHolderType.None:
                    break;

                case PlaceHolderType.NonRecursive:
                    this.NonRecursivePlaceholderFound(templateTagPart, openXmlElementDataContext);
                    break;

                case PlaceHolderType.Recursive:
                    this.RecursivePlaceholderFound(templateTagPart, openXmlElementDataContext);
                    break;

                //case PlaceHolderType.Ignore:
                //    this.IgnorePlaceholderFound(templateTagPart, openXmlElementDataContext);
                //    break;
                case PlaceHolderType.Container:
                    this.ContainerPlaceholderFound(templateTagPart, openXmlElementDataContext);
                    break;
                }
            }
        }
コード例 #3
0
        private bool IsContentControl(OpenXmlElementDataContext openXmlElementDataContext)
        {
            if (openXmlElementDataContext == null || openXmlElementDataContext.Element == null)
            {
                return(false);
            }

            return(openXmlElementDataContext.Element is SdtBlock || openXmlElementDataContext.Element is SdtRun || openXmlElementDataContext.Element is SdtRow || openXmlElementDataContext.Element is SdtCell);
        }
コード例 #4
0
        private void PopulateOtherOpenXmlElements(OpenXmlElementDataContext openXmlElementDataContext)
        {
            if (openXmlElementDataContext.Element is OpenXmlCompositeElement && openXmlElementDataContext.Element.HasChildren)
            {
                List <OpenXmlElement> elements = openXmlElementDataContext.Element.Elements().ToList();

                foreach (var element in elements)
                {
                    //if (element.LocalName == "br")
                    //    //Console.WriteLine(" -------------= " + element.LocalName);
                    if (element is OpenXmlCompositeElement)
                    {
                        this.SetContentInPlaceholders(new OpenXmlElementDataContext()
                        {
                            Element     = element,
                            DataContext = openXmlElementDataContext.DataContext
                        });
                    }
                }
            }
        }
コード例 #5
0
        protected void SetContentInPlaceholders(OpenXmlElementDataContext openXmlElementDataContext)
        {
            if (IsContentControl(openXmlElementDataContext))
            {
                string     templateTagPart = string.Empty;
                string     tagGuidPart     = string.Empty;
                SdtElement element         = openXmlElementDataContext.Element as SdtElement;
                GetTagValue(element, out templateTagPart, out tagGuidPart);

                if (this.generationInfo.PlaceHolderTagToTypeCollection.ContainsKey(templateTagPart))
                {
                    this.OnPlaceHolderFound(openXmlElementDataContext);
                }
                else
                {
                    this.PopulateOtherOpenXmlElements(openXmlElementDataContext);
                }
            }
            else
            {
                //Console.WriteLine("Other " + openXmlElementDataContext.Element.LocalName);
                this.PopulateOtherOpenXmlElements(openXmlElementDataContext);
            }
        }
コード例 #6
0
 protected abstract void ContainerPlaceholderFound(string placeholderTag, OpenXmlElementDataContext openXmlElementDataContext);
コード例 #7
0
 protected abstract void RecursivePlaceholderFound(string placeholderTag, OpenXmlElementDataContext openXmlElementDataContext);