From bfd7702939a162f62c46375762ceec9cd524f66a Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Thu, 6 Apr 2023 08:29:39 +0300 Subject: DI Refactoring --- RhSolutions.ExcelExtensions/Table.cs | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'RhSolutions.ExcelExtensions/Table.cs') diff --git a/RhSolutions.ExcelExtensions/Table.cs b/RhSolutions.ExcelExtensions/Table.cs index a19a4b4..aad2151 100644 --- a/RhSolutions.ExcelExtensions/Table.cs +++ b/RhSolutions.ExcelExtensions/Table.cs @@ -6,29 +6,40 @@ public class Table public Table ParentTable { get; protected set; } public Rows Rows { get; } public Columns Columns { get; } + private Dictionary _columnsByHeader; public Table(Range range) { Range = range; - ParentTable = null; - Rows = new Rows(Range, this); - Columns = new Columns(Range, this); + ParentTable = this; + Rows = new Rows(this); + Columns = new Columns(this); + _columnsByHeader = new(); + + foreach(var column in Columns) + { + if (_columnsByHeader.ContainsKey(column.Header)) + { + throw new ArgumentException($"Заголовок столбца {column.Header} не уникален"); + } + else + { + _columnsByHeader.Add(column.Header, column); + } + } } - public Table(Range range, Table table) + public Column ColumnByHeader(string header) { - Range = range; - ParentTable = table; - Rows = new Rows(Range, this); - Columns = new Columns(Range, this); + return _columnsByHeader[header]; } - public TableCell this[int row, int column] + public Cell this[int row, int column] { - get => new(Range.Cells[row + 1, column + 1], this); + get => this.Rows[row][column]; } - public IEnumerable Find(object item) + public IEnumerable Search(object item) { Range firstFound = Range.Find(item); if (firstFound == null) @@ -40,7 +51,7 @@ public class Table while (true) { - yield return new TableCell(nextFound, ParentTable ?? this); + yield return this[nextFound.Row - ParentTable.Range.Row, nextFound.Column - ParentTable.Range.Column]; nextFound = Range.FindNext(nextFound); if (nextFound.Row == firstFound.Row -- cgit v1.2.3