OfficeOpenXml.Table.PivotTable.ExcelPivotTableField.AppendField C# (CSharp) Method

AppendField() private method

private AppendField ( XmlNode rowsNode, int index, string fieldNodeText, string indexAttrText ) : XmlElement
rowsNode System.Xml.XmlNode
index int
fieldNodeText string
indexAttrText string
return System.Xml.XmlElement
        internal XmlElement AppendField(XmlNode rowsNode, int index, string fieldNodeText, string indexAttrText)
        {
            XmlElement prevField = null, newElement;
            foreach (XmlElement field in rowsNode.ChildNodes)
            {
                string x = field.GetAttribute(indexAttrText);
                int fieldIndex;
                if(int.TryParse(x, out fieldIndex))
                {
                    if (fieldIndex == index)    //Row already exists
                    {
                        return field;
                    }
                    else if (fieldIndex > index)
                    {
                        newElement = rowsNode.OwnerDocument.CreateElement(fieldNodeText, ExcelPackage.schemaMain);
                        newElement.SetAttribute(indexAttrText, index.ToString());
                        rowsNode.InsertAfter(newElement, field);
                    }
                }
                prevField=field;
            }
            newElement = rowsNode.OwnerDocument.CreateElement(fieldNodeText, ExcelPackage.schemaMain);
            newElement.SetAttribute(indexAttrText, index.ToString());
            rowsNode.InsertAfter(newElement, prevField);

            return newElement;
        }

Usage Example

Example #1
0
        /// <summary>
        /// Add a new datafield
        /// </summary>
        /// <param name="field">The field</param>
        /// <returns>The new datafield</returns>
        public ExcelPivotTableDataField Add(ExcelPivotTableField field)
        {
            var dataFieldsNode = field.TopNode.SelectSingleNode("../../d:dataFields", field.NameSpaceManager);

            if (dataFieldsNode == null)
            {
                _table.CreateNode("d:dataFields");
                dataFieldsNode = field.TopNode.SelectSingleNode("../../d:dataFields", field.NameSpaceManager);
            }

            XmlElement node = field.AppendField(dataFieldsNode, field.Index, "dataField", "fld");

            field.SetXmlNodeBool("@dataField", true, false);

            var dataField = new ExcelPivotTableDataField(field.NameSpaceManager, node, field);

            _list.Add(dataField);
            return(dataField);
        }