public static List <Tuple <PropertyInfo, object> > GetValues(Type type, Predicate <Row> predicate, Microsoft.Office.Interop.Excel.Range rows)
        {
            var values     = new List <Tuple <PropertyInfo, object> >();
            var properties = type.GetProperties();
            var row        = rows.ToModel().FirstOrDefault(r => predicate(r));

            if (row != null)
            {
                properties.ToList().ForEach(property =>
                {
                    var columnHeader = GetColumnHeader(property);
                    var cells        = from cell in row.Cells
                                       where cell.ColumnHeader.Equals(columnHeader)
                                       select cell.Value;
                    var value = cells.First();
                    values.Add(new Tuple <PropertyInfo, object>(property, value));
                });
            }
            return(values);
        }