/// <summary>
        /// Adds new excel sheet.
        /// </summary>
        /// <param name="reportRenderer">Report renderer.</param>
        /// <param name="reportRows">Report rows.</param>
        /// <param name="fillCellReferences">Fill cell references after sheet builded.</param>
        /// <returns>Builder instance.</returns>
        public ExcelReportBuilder AddReportSheet(
            IReportRenderer reportRenderer,
            IEnumerable <IPropertyContainer> reportRows,
            bool fillCellReferences = true)
        {
            reportRenderer.AssertArgumentNotNull(nameof(reportRenderer));
            reportRows.AssertArgumentNotNull(nameof(reportRows));

            var sheetMetadata = reportRenderer.GetMetadata <ExcelSheetMetadata>() ?? _defaultSheetMetadata;

            // Add a WorksheetPart to the WorkbookPart.
            WorkbookPart  workbookPart  = _documentContext.Document.WorkbookPart;
            uint          sheetCount    = workbookPart.GetSheetCount();
            WorksheetPart worksheetPart = workbookPart.AddNewPart <WorksheetPart>($"sheet{sheetCount+1}");

            var sheetContext = new SheetContext(_documentContext, worksheetPart, sheetMetadata, reportRenderer);

            AddSheet(sheetContext);

            AddSheetData(sheetContext, reportRows);

            if (fillCellReferences)
            {
                sheetContext.SheetElement.FillCellReferences(forceFill: fillCellReferences);
            }

            // External customization
            var configureSheet = ExcelSheetMetadata.ConfigureSheet.GetFirstDefinedValue(
                sheetContext.SheetMetadata,
                _documentMetadata);

            configureSheet?.Invoke(sheetContext);

            return(this);
        }
        public ExcelReportBuilder AddSheetDataTBD(
            IReportRenderer reportRenderer,
            IEnumerable <IPropertyContainer> reportRows,
            bool fillCellReferences = true)
        {
            var sheetMetadata = reportRenderer.GetMetadata <ExcelSheetMetadata>() ?? _defaultSheetMetadata;

            // FIND ALL PARTS!!!
            WorkbookPart workbookPart = _documentContext.Document.WorkbookPart;

            WorksheetPart worksheetPart = workbookPart.GetPartsOfType <WorksheetPart>().FirstOrDefault();
            Sheets        sheets        = workbookPart.Workbook.Sheets;

            var sheetContext = new SheetContext(_documentContext, worksheetPart, sheetMetadata, reportRenderer);

            sheetContext.SheetData = new SheetData();

            return(this);
        }