public virtual List <TEntity> MapData(IEnumerable <Row> rows, Row headerRow)
        {
            //initialize list of container to add data
            var entities = new List <TEntity>();

            //loop on rows and skip first row that contain only column header
            for (int i = 1; i < rows.Count(); i++)
            {
                // create new instance of T type
                TEntity entity = (TEntity)Activator.CreateInstance(typeof(TEntity));
                //get data row
                Row row = rows.ElementAt(i);
                //initialize list of container of setting reference properties
                List <string> settingReferenceProperties = new List <string>();
                //get row cells include empty values
                var rowCellValues = GetRowValues(row, headerRow.Elements <Cell>().Count());
                //loop on cells of row
                for (int y = 0; y < rowCellValues.Count(); y++)
                {
                    //get reference of cell value
                    var cellValue = rowCellValues[y];
                    //to set the value to entity property
                    //first : check about HeaderEntityReferences if exist and header index is saved in HeaderEntityReferences
                    if (HeaderEntityReferences != null && HeaderEntityReferences.Any(h => h.Headers.Any(info => info.HeaderIndex == y)))
                    {
                        SetReferenceValue(ref entity, rowCellValues, y, settingReferenceProperties);
                    }
                    else
                    {
                        //get property name from columns header that will be set with value
                        string propertyName = (string)GetCellValue(headerRow.Elements <Cell>().ElementAt(y));
                        //set value to property of object
                        Repository <TEntity> .SetPropertyValue(ref entity, propertyName, cellValue);
                    }
                }
                //insert object to list of container
                entities.Add(entity);
            }

            return(entities);
        }