aboutsummaryrefslogtreecommitdiff
path: root/RhSolutions.ExcelExtensions/Table.cs
diff options
context:
space:
mode:
Diffstat (limited to 'RhSolutions.ExcelExtensions/Table.cs')
-rw-r--r--RhSolutions.ExcelExtensions/Table.cs35
1 files changed, 23 insertions, 12 deletions
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<string, Column> _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<TableCell> Find(object item)
+ public IEnumerable<Cell> 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