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); }
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); }
public override string ToString() { return(_column.ToString() + _line); }