/// <summary> /// Ecrit une ligne démarrant à la cellule courante. /// Les valeurs de cellules sont lues dans l'ordre des propriétés du bean <code>row</code>. /// </summary> /// <typeparam name="TRow">Type de la ligne.</typeparam> /// <param name="row">Bean de la ligne.</param> /// <returns>Le builder.</returns> public ExcelTemplateBuilder WriteRow <TRow>(TRow row) { var def = BeanDescriptor.GetDefinition(row); var initialColumn = _currentCell.ColumnName; /* Parcourt des propriétés du bean. */ foreach (var propDesc in def.Properties) { /* Valeur de la propriété pour le bean. */ object value = propDesc.GetValue(row); var cellValue = CellValues.SharedString; /* Cas d'une cellule vide. */ var strValue = value == null ? string.Empty : value.ToString(); /* Cas d'un decimal. */ if (propDesc.PrimitiveType == typeof(decimal)) { cellValue = CellValues.Number; strValue = strValue.Replace(" ", string.Empty).Replace(",", "."); } /* Ecrit dans la cellule courante. */ WriteCellCore(strValue, cellValue); /* Passe à la colonne suivante. */ _currentCell = _currentCell.ShiftColumn(1); } /* On retourne à la cellule initiale de la ligne. */ _currentCell = _currentCell.ChangeColumn(initialColumn); return(this); }
/// <summary> /// Récupère une ligne du tableau excel du type passé en paramètre de la méthode générique. /// </summary> /// <typeparam name="TRow">Le type de l'objet de retour.</typeparam> /// <returns>Une ligne du fichier excel.</returns> public TRow ReadRow <TRow>() where TRow : new() { var row = new TRow(); var def = BeanDescriptor.GetDefinition(row); var initialColumn = _currentCell.ColumnName; var emptyCellsNb = 0; /* Parcourt des propriétés du bean. */ foreach (var propDesc in def.Properties) { var value = ReadCellCore(propDesc.PrimitiveType); // On suppose que la première ligne vide correspond à la fin du document. if (value == null) { emptyCellsNb++; if (emptyCellsNb == def.Properties.Count) { return(default(TRow)); } } propDesc.SetValue(row, value); /* Passe à la colonne suivante. */ _currentCell = _currentCell.ShiftColumn(1); } /* On retourne à la cellule initiale de la ligne. */ _currentCell = _currentCell.ChangeColumn(initialColumn); return(row); }