Represents the Header and Footer on an Excel Worksheet
        /// <summary>
        /// Sets the document footer section from model.
        /// </summary>
        /// <param name="reference">The header or footer document properties.</param>
        /// <param name="section">Fotter section model information.</param>
        /// <returns>
        /// An <see cref="T:OfficeOpenXml.OfficeProperties"/> reference which contains the document footer section.
        /// </returns>
        private static ExcelHeaderFooter SetDocumentFooterSectionFromModel(this ExcelHeaderFooter reference, HeaderFooterSectionModel section)
        {
            SentinelHelper.ArgumentNull(reference);
            SentinelHelper.ArgumentNull(section);

            if (string.IsNullOrEmpty(section.Text))
            {
                return(reference);
            }

            var footer =
                section.Type == KnownHeaderFooterSectionType.Odd
                    ? reference.OddFooter
                    : reference.EvenFooter;

            var parsedText = OfficeOpenXmlHelper.GetHeaderFooterParsedText(section.Text);

            switch (section.Alignment)
            {
            case KnownHeaderFooterAlignment.Right:
                footer.RightAlignedText = parsedText;
                break;

            case KnownHeaderFooterAlignment.Left:
                footer.LeftAlignedText = parsedText;
                break;

            default:
            case KnownHeaderFooterAlignment.Center:
                footer.CenteredText = parsedText;
                break;
            }

            return(reference);
        }
        /// <summary>
        /// Sets the header document from model.
        /// </summary>
        /// <param name="reference">The header document properties.</param>
        /// <param name="footer">Header or footer model information.</param>
        /// <returns>
        /// An <see cref="T:OfficeOpenXml.OfficeProperties"/> reference which contains the document header.
        /// </returns>
        public static ExcelHeaderFooter SetDocumentFooterFromModel(this ExcelHeaderFooter reference, DocumentHeaderFooterModel footer)
        {
            SentinelHelper.ArgumentNull(reference);
            SentinelHelper.ArgumentNull(footer);

            bool hasSections = footer.Sections.Any();

            if (!hasSections)
            {
                return(reference);
            }

            var sections = footer.Sections;

            foreach (var section in sections)
            {
                SetDocumentFooterSectionFromModel(reference, section);
            }

            return(reference);
        }