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 la liste des lignes du tableau excel sous le format du type passé en paramètre.
        /// </summary>
        /// <typeparam name="TRow">Le type de l'objet de retour.</typeparam>
        /// <returns>La liste des lignes du fichier Excel.</returns>
        public ICollection <TRow> ReadRows <TRow>()
            where TRow : new()
        {
            var initialRow = _currentCell.RowIndex;
            var rows       = new List <TRow>();

            /* Parcourt les lignes. */
            while (true)
            {
                /* On lit la ligne. */
                var row = ReadRow <TRow>();

                if (row == null)
                {
                    break;
                }

                rows.Add(row);

                /* Passe à la ligne suivante. */
                _currentCell = _currentCell.ShiftRow(1);
            }

            /* Retourne à la première ligne. */
            _currentCell = _currentCell.ChangeRow(initialRow);

            return(rows);
        }
Beispiel #3
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);
        }
Beispiel #4
0
 /// <summary>
 /// Indique si la cellule fusionnée contient une cellule donnée.
 /// </summary>
 /// <param name="cell">Cellule à vérifier.</param>
 /// <returns><code>True</code> si la cellule est contenue.</returns>
 public bool Contains(ExcelCell cell)
 {
     return
         (_startCell.ColumnIndex <= cell.ColumnIndex &&
          cell.ColumnIndex <= _endCell.ColumnIndex &&
          _startCell.RowIndex <= cell.RowIndex &&
          cell.RowIndex <= _endCell.RowIndex);
 }
Beispiel #5
0
        /// <summary>
        /// Déplace le focus sur une cellule donnée.
        /// </summary>
        /// <param name="cellName">Nom de la cellule.</param>
        /// <returns>Le builder.</returns>
        public ExcelTemplateBuilder SetFocus(string cellName)
        {
            if (string.IsNullOrEmpty(cellName))
            {
                throw new ArgumentNullException("cellName");
            }

            _currentCell = ExcelCell.Create(this, cellName);
            return(this);
        }
Beispiel #6
0
        /// <summary>
        /// Obtient la cellule fusionnée qui contient une cellule, si elle existe.
        /// </summary>
        /// <param name="cell">Cellule à rechercher.</param>
        /// <returns>Cellule fusionnée.</returns>
        internal ExcelMergeCell GetMergCell(ExcelCell cell)
        {
            foreach (var excelMergeCell in _mergeCells)
            {
                if (excelMergeCell.Contains(cell))
                {
                    return(excelMergeCell);
                }
            }

            return(null);
        }
Beispiel #7
0
        /// <summary>
        /// Lit la liste des cellules fusionnées du tableau.
        /// </summary>
        private void ReadMergeCells()
        {
            var mergedCells = _worksheet.GetFirstChild <MergeCells>();

            if (mergedCells == null)
            {
                return;
            }

            foreach (MergeCell mergeCell in mergedCells)
            {
                var arr            = mergeCell.Reference.Value.Split(':');
                var start          = arr[0];
                var end            = arr[1];
                var excelMergeCell = new ExcelMergeCell(ExcelCell.Create(this, start), ExcelCell.Create(this, end));
                _mergeCells.Add(excelMergeCell);
            }
        }
Beispiel #8
0
        /// <summary>
        /// Ecrit une liste de lignes démarrant à la cellule courante.
        /// Les valeurs de cellules sont lues dans l'ordre des propriétés du bean <code>row</code>.
        /// Les lignes sont écrites dans l'ordre de la collection.
        /// </summary>
        /// <typeparam name="TRow">Type de la ligne.</typeparam>
        /// <param name="rows">Liste des beans de ligne.</param>
        /// <returns>Le builder.</returns>
        public ExcelTemplateBuilder WriteRows <TRow>(ICollection <TRow> rows)
        {
            var initialRow = _currentCell.RowIndex;

            /* Parcourt les lignes. */
            foreach (var row in rows)
            {
                /* Ecrit la ligne. */
                WriteRow(row);

                /* Passe à la ligne suivante. */
                _currentCell = _currentCell.ShiftRow(1);
            }

            /* Retourne à la première ligne. */
            _currentCell = _currentCell.ChangeRow(initialRow);

            return(this);
        }
Beispiel #9
0
        // Given a worksheet, a column name, and a row index,
        // gets the cell at the specified column and
        private Cell GetCell(ExcelCell excelCell)
        {
            /* Obtient la ligne. */
            Row row = GetRow(excelCell.RowIndex);

            if (row == null)
            {
                return(null);
            }

            /* Obtient la cellule. */
            string cellName = excelCell.Name;
            Cell   cell     = row.Elements <Cell>()
                              .Where(c => string.Compare(c.CellReference.Value, cellName, true) == 0)
                              .FirstOrDefault();

            // if (cell == null) {
            //    throw new NotSupportedException("Cellule introuvable : " + cellName);
            // }
            return(cell);
        }
Beispiel #10
0
 /// <summary>
 /// Créé une nouvelle cellule fusionnée.
 /// </summary>
 /// <param name="startCell">Début de la plage.</param>
 /// <param name="endCell">Fin de la plage.</param>
 public ExcelMergeCell(ExcelCell startCell, ExcelCell endCell)
 {
     _endCell   = endCell;
     _startCell = startCell;
 }
Beispiel #11
0
 /// <summary>
 /// Déplace le focus vers la même colonne et delta lignes plus bas.
 /// </summary>
 /// <param name="delta">Le delta.</param>
 /// <returns>Le builder.</returns>
 public ExcelTemplateBuilder ShiftRow(uint delta)
 {
     _currentCell = _currentCell.ShiftRow(delta);
     return(this);
 }