Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }