예제 #1
0
        public static Cell GetCell(SheetData sheetData, BaseAZ column, uint line, bool createIfDoesntExists = false)
        {
            var row = GetRow(sheetData, line, createIfDoesntExists);

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

            var cellReference = column.ToString() + line;

            var cell = row.Elements <Cell>().FirstOrDefault(c => c.CellReference == cellReference);

            if (cell != null)
            {
                return(cell);
            }
            else if (!createIfDoesntExists)
            {
                return(null);
            }

            cell = new Cell {
                CellReference = cellReference
            };

            // Se nao existir outras celulas pode inserir em qualquer lugar.
            if (!row.Elements <Cell>().Any())
            {
                row.AppendChild(cell);
                return(cell);
            }

            // Caso existam outras celular precisa inserir na posicao correta.
            var cells = row.Elements <Cell>()
                        .Select(s => new
            {
                Ref  = CellReference.Parse(s.CellReference),
                Cell = s
            })
                        .OrderBy(o => o.Ref.Column)
                        .ToList();

            var before = cells.LastOrDefault(w => w.Ref.Column < column);

            if (before != null) // Existem linhas anteriores a que sera inserida.
            {
                row.InsertAfter(cell, before.Cell);
            }
            else // Nao existem nenhuma linha anterior a que sera inserida.
            {
                var after = cells.First(f => f.Ref.Column > column);

                // Insere antes do primeiro.
                row.InsertBefore(cell, after.Cell);
            }

            return(cell);
        }
예제 #2
0
        public string GetValue(BaseAZ column, uint line)
        {
            var cell = GetCell(column.ToString() + line);

            if (cell?.DataType?.Value == CellValues.SharedString)
            {
                return(_stringTable?.SharedStringTable.ElementAt(int.Parse(cell.InnerText)).InnerText);
            }

            return(cell?.InnerText);
        }
예제 #3
0
 public override string ToString()
 {
     return(_column.ToString() + _line);
 }