From 448af8ecd7bf9db070e090c4b434da693ba0ae89 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Sat, 1 Apr 2023 15:58:42 +0300 Subject: Move Excel extensions to own project --- RhSolutions.AddIn/ExcelTable/ExcelColumn.cs | 47 ------------------ .../ExcelTable/ExcelColumnEnumerator.cs | 54 --------------------- RhSolutions.AddIn/ExcelTable/ExcelColumns.cs | 39 --------------- .../ExcelTable/ExcelColumnsEnumerator.cs | 54 --------------------- RhSolutions.AddIn/ExcelTable/ExcelRow.cs | 33 ------------- RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs | 54 --------------------- RhSolutions.AddIn/ExcelTable/ExcelRows.cs | 39 --------------- .../ExcelTable/ExcelRowsEnumerator.cs | 55 ---------------------- RhSolutions.AddIn/ExcelTable/ExcelTable.cs | 53 --------------------- RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs | 24 ---------- RhSolutions.AddIn/RhSolutions.AddIn.csproj | 3 ++ RhSolutions.ExcelExtensions/Column.cs | 47 ++++++++++++++++++ RhSolutions.ExcelExtensions/ColumnEnumerator.cs | 54 +++++++++++++++++++++ RhSolutions.ExcelExtensions/Columns.cs | 39 +++++++++++++++ RhSolutions.ExcelExtensions/ColumnsEnumerator.cs | 54 +++++++++++++++++++++ .../RhSolutions.ExcelExtensions.csproj | 15 ++++++ RhSolutions.ExcelExtensions/Row.cs | 33 +++++++++++++ RhSolutions.ExcelExtensions/RowEnumerator.cs | 54 +++++++++++++++++++++ RhSolutions.ExcelExtensions/Rows.cs | 39 +++++++++++++++ RhSolutions.ExcelExtensions/RowsEnumerator.cs | 55 ++++++++++++++++++++++ RhSolutions.ExcelExtensions/Table.cs | 53 +++++++++++++++++++++ RhSolutions.ExcelExtensions/TableCell.cs | 24 ++++++++++ RhSolutions.ExcelExtensions/Usings.cs | 3 ++ RhSolutions.Tests/ExcelTablesTests.cs | 2 +- RhSolutions.Tests/Usings.cs | 5 +- RhSolutions.sln | 6 +++ 26 files changed, 482 insertions(+), 456 deletions(-) delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelColumn.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelColumns.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelRow.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelRows.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelTable.cs delete mode 100644 RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs create mode 100644 RhSolutions.ExcelExtensions/Column.cs create mode 100644 RhSolutions.ExcelExtensions/ColumnEnumerator.cs create mode 100644 RhSolutions.ExcelExtensions/Columns.cs create mode 100644 RhSolutions.ExcelExtensions/ColumnsEnumerator.cs create mode 100644 RhSolutions.ExcelExtensions/RhSolutions.ExcelExtensions.csproj create mode 100644 RhSolutions.ExcelExtensions/Row.cs create mode 100644 RhSolutions.ExcelExtensions/RowEnumerator.cs create mode 100644 RhSolutions.ExcelExtensions/Rows.cs create mode 100644 RhSolutions.ExcelExtensions/RowsEnumerator.cs create mode 100644 RhSolutions.ExcelExtensions/Table.cs create mode 100644 RhSolutions.ExcelExtensions/TableCell.cs create mode 100644 RhSolutions.ExcelExtensions/Usings.cs diff --git a/RhSolutions.AddIn/ExcelTable/ExcelColumn.cs b/RhSolutions.AddIn/ExcelTable/ExcelColumn.cs deleted file mode 100644 index 7d72cd5..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumn.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public sealed class ExcelColumn : ExcelTable, IEnumerable -{ - public string Header - { - get => Range.Cells[1, 1].Value.ToString(); - } - public int Index - { - get => Range.Column - ParentTable.Range.Column; - } - public int Length - { - get => Range.Rows.Count; - } - - public ExcelColumn(Range range, ExcelTable table) : base(range, table) - { - Range = range; - ParentTable = table; - } - - public ExcelTableCell this[int index] - { - get => new(Range.Cells[index + 1, 1], ParentTable); - } - - public IEnumerator GetEnumerator() - { - return new ExcelColumnEnumerator(Range, ParentTable); - } - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); - - - public ExcelColumn AddLeft() - { - Range.EntireColumn - .Insert(XlInsertShiftDirection.xlShiftToRight, - XlInsertFormatOrigin.xlFormatFromRightOrBelow); - - return ParentTable.Columns[this.Index - 1]; - } -} diff --git a/RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs b/RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs deleted file mode 100644 index c809c18..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public class ExcelColumnEnumerator : IEnumerator -{ - public Range Range { get; } - public ExcelTable ParentTable { get; } - private int position = 0; - object IEnumerator.Current - { - get - { - return Current; - } - } - - public ExcelTableCell Current - { - get - { - try - { - return new ExcelTableCell(Range.Cells[position, 1], ParentTable); - } - catch (IndexOutOfRangeException) - { - throw new InvalidOperationException(); - } - } - } - - public ExcelColumnEnumerator(Range range, ExcelTable table) - { - Range = range; - ParentTable = table; - } - - public bool MoveNext() - { - position++; - return (position <= Range.Rows.Count); - } - - public void Reset() - { - position = 0; - } - - public void Dispose() - { - - } -} diff --git a/RhSolutions.AddIn/ExcelTable/ExcelColumns.cs b/RhSolutions.AddIn/ExcelTable/ExcelColumns.cs deleted file mode 100644 index 4aacd6f..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumns.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public class ExcelColumns : IEnumerable -{ - public Range Range { get; } - public ExcelTable ParentTable { get; } - public int Length - { - get => Range.Columns.Count; - } - - public ExcelColumns(Range range, ExcelTable parentTable) - { - Range = range; - ParentTable = parentTable; - } - - public ExcelColumn this[int index] - { - get - { - if (index < 0 || index + 1 > Range.Columns.Count) - { - throw new IndexOutOfRangeException(); - } - - return new ExcelColumn(Range.Columns[index + 1], ParentTable); - } - } - - public IEnumerator GetEnumerator() - { - return new ExcelColumnsEnumerator(Range, ParentTable); - } - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); -} \ No newline at end of file diff --git a/RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs b/RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs deleted file mode 100644 index 8c351e9..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public class ExcelColumnsEnumerator: IEnumerator -{ - public Range Range { get; } - public ExcelTable ParentTable { get; } - private int position = 0; - object IEnumerator.Current - { - get - { - return Current; - } - } - - public ExcelColumn Current - { - get - { - try - { - return new ExcelColumn(Range.Columns[position], ParentTable); - } - catch (IndexOutOfRangeException) - { - throw new InvalidOperationException(); - } - } - } - - public ExcelColumnsEnumerator(Range range, ExcelTable table) - { - Range = range; - ParentTable = table; - } - - public bool MoveNext() - { - position++; - return (position <= Range.Columns.Count); - } - - public void Reset() - { - position = 0; - } - - public void Dispose() - { - - } -} \ No newline at end of file diff --git a/RhSolutions.AddIn/ExcelTable/ExcelRow.cs b/RhSolutions.AddIn/ExcelTable/ExcelRow.cs deleted file mode 100644 index 231fd7c..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelRow.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public sealed class ExcelRow : ExcelTable, IEnumerable -{ - public int Index - { - get => Range.Row - ParentTable.Range.Row; - } - public int Length - { - get => Range.Columns.Count; - } - - public ExcelRow(Range range, ExcelTable table) : base(range, table) - { - Range = range; - ParentTable = table; - } - - public ExcelTableCell this[int index] - { - get => new(Range.Cells[1, index + 1], ParentTable); - } - - public IEnumerator GetEnumerator() - { - return new ExcelRowEnumerator(Range, ParentTable); - } - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); -} diff --git a/RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs b/RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs deleted file mode 100644 index 58f88d8..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public class ExcelRowEnumerator : IEnumerator -{ - public Range Range { get; } - public ExcelTable ParentTable { get; } - private int position = 0; - object IEnumerator.Current - { - get - { - return Current; - } - } - - public ExcelTableCell Current - { - get - { - try - { - return new ExcelTableCell(Range.Cells[1, position], ParentTable); - } - catch (IndexOutOfRangeException) - { - throw new InvalidOperationException(); - } - } - } - - public ExcelRowEnumerator(Range range, ExcelTable parentTable) - { - Range = range; - ParentTable = parentTable; - } - - public bool MoveNext() - { - position++; - return (position <= Range.Columns.Count); - } - - public void Reset() - { - position = 0; - } - - public void Dispose() - { - - } -} \ No newline at end of file diff --git a/RhSolutions.AddIn/ExcelTable/ExcelRows.cs b/RhSolutions.AddIn/ExcelTable/ExcelRows.cs deleted file mode 100644 index 44602f0..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelRows.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public class ExcelRows : IEnumerable -{ - public Range Range { get; } - public ExcelTable ParentTable { get; } - public int Length - { - get => Range.Rows.Count; - } - - public ExcelRows(Range range, ExcelTable parentTable) - { - Range = range; - ParentTable = parentTable; - } - - public ExcelRow this[int index] - { - get - { - if (index < 0 || index + 1 > Range.Rows.Count) - { - throw new IndexOutOfRangeException(); - } - - return new ExcelRow(Range.Rows[index + 1], ParentTable); - } - } - - public IEnumerator GetEnumerator() - { - return new ExcelRowsEnumerator(Range, ParentTable); - } - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); -} diff --git a/RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs b/RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs deleted file mode 100644 index e5430d1..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Collections; - -namespace RhSolutions.ExcelTable; - -public class ExcelRowsEnumerator : IEnumerator -{ - public Range Range { get; } - public ExcelTable ParentTable { get; } - private int position = 0; - object IEnumerator.Current - { - get - { - return Current; - } - } - - public ExcelRow Current - { - get - { - try - { - return new ExcelRow(Range.Rows[position], ParentTable); - } - catch (IndexOutOfRangeException) - { - throw new InvalidOperationException(); - } - } - } - - public ExcelRowsEnumerator(Range range, ExcelTable table) - { - Range = range; - ParentTable = table; - } - - public bool MoveNext() - { - position++; - return (position <= Range.Rows.Count); - } - - public void Reset() - { - position = 0; - } - - public void Dispose() - { - - } - -} \ No newline at end of file diff --git a/RhSolutions.AddIn/ExcelTable/ExcelTable.cs b/RhSolutions.AddIn/ExcelTable/ExcelTable.cs deleted file mode 100644 index 2788036..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelTable.cs +++ /dev/null @@ -1,53 +0,0 @@ -namespace RhSolutions.ExcelTable; - -public class ExcelTable -{ - public Range Range { get; protected set; } - public ExcelTable ParentTable { get; protected set; } - public ExcelRows Rows { get; } - public ExcelColumns Columns { get; } - - public ExcelTable(Range range) - { - Range = range; - ParentTable = null; - Rows = new ExcelRows(Range, this); - Columns = new ExcelColumns(Range, this); - } - - public ExcelTable(Range range, ExcelTable table) - { - Range = range; - ParentTable = table; - Rows = new ExcelRows(Range, this); - Columns = new ExcelColumns(Range, this); - } - - public ExcelTableCell this[int row, int column] - { - get => new(Range.Cells[row + 1, column + 1], this); - } - - public IEnumerable Find(object item) - { - Range firstFound = Range.Find(item); - if (firstFound == null) - { - yield break; - } - - Range nextFound = firstFound; - - while (true) - { - yield return new ExcelTableCell(nextFound, ParentTable ?? this); - nextFound = Range.FindNext(nextFound); - - if (nextFound.Row == firstFound.Row - && nextFound.Column == firstFound.Column) - { - yield break; - } - } - } -} diff --git a/RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs b/RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs deleted file mode 100644 index 8f742d2..0000000 --- a/RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace RhSolutions.ExcelTable; - -public sealed class ExcelTableCell : ExcelTable -{ - public ExcelRow ParentRow - { - get => ParentTable.Rows[ParentTable.Range.Row - Range.Row]; - } - public ExcelColumn ParentColumn - { - get => ParentTable.Columns[ParentTable.Range.Column - Range.Column]; - } - public object Value - { - get => Range.Cells[1, 1].Value2; - set => Range.Cells[1, 1].Value2 = value; - } - - public ExcelTableCell(Range range, ExcelTable table) : base(range, table) - { - Range = range; - ParentTable = table; - } -} diff --git a/RhSolutions.AddIn/RhSolutions.AddIn.csproj b/RhSolutions.AddIn/RhSolutions.AddIn.csproj index 81fcb6a..536248e 100644 --- a/RhSolutions.AddIn/RhSolutions.AddIn.csproj +++ b/RhSolutions.AddIn/RhSolutions.AddIn.csproj @@ -36,4 +36,7 @@ + + + \ No newline at end of file diff --git a/RhSolutions.ExcelExtensions/Column.cs b/RhSolutions.ExcelExtensions/Column.cs new file mode 100644 index 0000000..53a1f3d --- /dev/null +++ b/RhSolutions.ExcelExtensions/Column.cs @@ -0,0 +1,47 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public sealed class Column : Table, IEnumerable +{ + public string Header + { + get => Range.Cells[1, 1].Value.ToString(); + } + public int Index + { + get => Range.Column - ParentTable.Range.Column; + } + public int Length + { + get => Range.Rows.Count; + } + + public Column(Range range, Table table) : base(range, table) + { + Range = range; + ParentTable = table; + } + + public TableCell this[int index] + { + get => new(Range.Cells[index + 1, 1], ParentTable); + } + + public IEnumerator GetEnumerator() + { + return new ColumnEnumerator(Range, ParentTable); + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + + + public Column AddLeft() + { + Range.EntireColumn + .Insert(XlInsertShiftDirection.xlShiftToRight, + XlInsertFormatOrigin.xlFormatFromRightOrBelow); + + return ParentTable.Columns[this.Index - 1]; + } +} diff --git a/RhSolutions.ExcelExtensions/ColumnEnumerator.cs b/RhSolutions.ExcelExtensions/ColumnEnumerator.cs new file mode 100644 index 0000000..9880b5d --- /dev/null +++ b/RhSolutions.ExcelExtensions/ColumnEnumerator.cs @@ -0,0 +1,54 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public class ColumnEnumerator : IEnumerator +{ + public Range Range { get; } + public Table ParentTable { get; } + private int position = 0; + object IEnumerator.Current + { + get + { + return Current; + } + } + + public TableCell Current + { + get + { + try + { + return new TableCell(Range.Cells[position, 1], ParentTable); + } + catch (IndexOutOfRangeException) + { + throw new InvalidOperationException(); + } + } + } + + public ColumnEnumerator(Range range, Table table) + { + Range = range; + ParentTable = table; + } + + public bool MoveNext() + { + position++; + return (position <= Range.Rows.Count); + } + + public void Reset() + { + position = 0; + } + + public void Dispose() + { + + } +} diff --git a/RhSolutions.ExcelExtensions/Columns.cs b/RhSolutions.ExcelExtensions/Columns.cs new file mode 100644 index 0000000..1fbc0ef --- /dev/null +++ b/RhSolutions.ExcelExtensions/Columns.cs @@ -0,0 +1,39 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public class Columns : IEnumerable +{ + public Range Range { get; } + public Table ParentTable { get; } + public int Length + { + get => Range.Columns.Count; + } + + public Columns(Range range, Table parentTable) + { + Range = range; + ParentTable = parentTable; + } + + public Column this[int index] + { + get + { + if (index < 0 || index + 1 > Range.Columns.Count) + { + throw new IndexOutOfRangeException(); + } + + return new Column(Range.Columns[index + 1], ParentTable); + } + } + + public IEnumerator GetEnumerator() + { + return new ColumnsEnumerator(Range, ParentTable); + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); +} \ No newline at end of file diff --git a/RhSolutions.ExcelExtensions/ColumnsEnumerator.cs b/RhSolutions.ExcelExtensions/ColumnsEnumerator.cs new file mode 100644 index 0000000..578e2b0 --- /dev/null +++ b/RhSolutions.ExcelExtensions/ColumnsEnumerator.cs @@ -0,0 +1,54 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public class ColumnsEnumerator: IEnumerator +{ + public Range Range { get; } + public Table ParentTable { get; } + private int position = 0; + object IEnumerator.Current + { + get + { + return Current; + } + } + + public Column Current + { + get + { + try + { + return new Column(Range.Columns[position], ParentTable); + } + catch (IndexOutOfRangeException) + { + throw new InvalidOperationException(); + } + } + } + + public ColumnsEnumerator(Range range, Table table) + { + Range = range; + ParentTable = table; + } + + public bool MoveNext() + { + position++; + return (position <= Range.Columns.Count); + } + + public void Reset() + { + position = 0; + } + + public void Dispose() + { + + } +} \ No newline at end of file diff --git a/RhSolutions.ExcelExtensions/RhSolutions.ExcelExtensions.csproj b/RhSolutions.ExcelExtensions/RhSolutions.ExcelExtensions.csproj new file mode 100644 index 0000000..bf58d4f --- /dev/null +++ b/RhSolutions.ExcelExtensions/RhSolutions.ExcelExtensions.csproj @@ -0,0 +1,15 @@ + + + + net472;net6.0-windows7.0 + 10 + enable + enable + + + + + + + + diff --git a/RhSolutions.ExcelExtensions/Row.cs b/RhSolutions.ExcelExtensions/Row.cs new file mode 100644 index 0000000..32617b4 --- /dev/null +++ b/RhSolutions.ExcelExtensions/Row.cs @@ -0,0 +1,33 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public sealed class Row : Table, IEnumerable +{ + public int Index + { + get => Range.Row - ParentTable.Range.Row; + } + public int Length + { + get => Range.Columns.Count; + } + + public Row(Range range, Table table) : base(range, table) + { + Range = range; + ParentTable = table; + } + + public TableCell this[int index] + { + get => new(Range.Cells[1, index + 1], ParentTable); + } + + public IEnumerator GetEnumerator() + { + return new RowEnumerator(Range, ParentTable); + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); +} diff --git a/RhSolutions.ExcelExtensions/RowEnumerator.cs b/RhSolutions.ExcelExtensions/RowEnumerator.cs new file mode 100644 index 0000000..fd56dcd --- /dev/null +++ b/RhSolutions.ExcelExtensions/RowEnumerator.cs @@ -0,0 +1,54 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public class RowEnumerator : IEnumerator +{ + public Range Range { get; } + public Table ParentTable { get; } + private int position = 0; + object IEnumerator.Current + { + get + { + return Current; + } + } + + public TableCell Current + { + get + { + try + { + return new TableCell(Range.Cells[1, position], ParentTable); + } + catch (IndexOutOfRangeException) + { + throw new InvalidOperationException(); + } + } + } + + public RowEnumerator(Range range, Table parentTable) + { + Range = range; + ParentTable = parentTable; + } + + public bool MoveNext() + { + position++; + return (position <= Range.Columns.Count); + } + + public void Reset() + { + position = 0; + } + + public void Dispose() + { + + } +} \ No newline at end of file diff --git a/RhSolutions.ExcelExtensions/Rows.cs b/RhSolutions.ExcelExtensions/Rows.cs new file mode 100644 index 0000000..1c0bc0d --- /dev/null +++ b/RhSolutions.ExcelExtensions/Rows.cs @@ -0,0 +1,39 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public class Rows : IEnumerable +{ + public Range Range { get; } + public Table ParentTable { get; } + public int Length + { + get => Range.Rows.Count; + } + + public Rows(Range range, Table parentTable) + { + Range = range; + ParentTable = parentTable; + } + + public Row this[int index] + { + get + { + if (index < 0 || index + 1 > Range.Rows.Count) + { + throw new IndexOutOfRangeException(); + } + + return new Row(Range.Rows[index + 1], ParentTable); + } + } + + public IEnumerator GetEnumerator() + { + return new RowsEnumerator(Range, ParentTable); + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); +} diff --git a/RhSolutions.ExcelExtensions/RowsEnumerator.cs b/RhSolutions.ExcelExtensions/RowsEnumerator.cs new file mode 100644 index 0000000..b53db98 --- /dev/null +++ b/RhSolutions.ExcelExtensions/RowsEnumerator.cs @@ -0,0 +1,55 @@ +using System.Collections; + +namespace RhSolutions.ExcelExtensions; + +public class RowsEnumerator : IEnumerator +{ + public Range Range { get; } + public Table ParentTable { get; } + private int position = 0; + object IEnumerator.Current + { + get + { + return Current; + } + } + + public Row Current + { + get + { + try + { + return new Row(Range.Rows[position], ParentTable); + } + catch (IndexOutOfRangeException) + { + throw new InvalidOperationException(); + } + } + } + + public RowsEnumerator(Range range, Table table) + { + Range = range; + ParentTable = table; + } + + public bool MoveNext() + { + position++; + return (position <= Range.Rows.Count); + } + + public void Reset() + { + position = 0; + } + + public void Dispose() + { + + } + +} \ No newline at end of file diff --git a/RhSolutions.ExcelExtensions/Table.cs b/RhSolutions.ExcelExtensions/Table.cs new file mode 100644 index 0000000..a19a4b4 --- /dev/null +++ b/RhSolutions.ExcelExtensions/Table.cs @@ -0,0 +1,53 @@ +namespace RhSolutions.ExcelExtensions; + +public class Table +{ + public Range Range { get; protected set; } + public Table ParentTable { get; protected set; } + public Rows Rows { get; } + public Columns Columns { get; } + + public Table(Range range) + { + Range = range; + ParentTable = null; + Rows = new Rows(Range, this); + Columns = new Columns(Range, this); + } + + public Table(Range range, Table table) + { + Range = range; + ParentTable = table; + Rows = new Rows(Range, this); + Columns = new Columns(Range, this); + } + + public TableCell this[int row, int column] + { + get => new(Range.Cells[row + 1, column + 1], this); + } + + public IEnumerable Find(object item) + { + Range firstFound = Range.Find(item); + if (firstFound == null) + { + yield break; + } + + Range nextFound = firstFound; + + while (true) + { + yield return new TableCell(nextFound, ParentTable ?? this); + nextFound = Range.FindNext(nextFound); + + if (nextFound.Row == firstFound.Row + && nextFound.Column == firstFound.Column) + { + yield break; + } + } + } +} diff --git a/RhSolutions.ExcelExtensions/TableCell.cs b/RhSolutions.ExcelExtensions/TableCell.cs new file mode 100644 index 0000000..822673e --- /dev/null +++ b/RhSolutions.ExcelExtensions/TableCell.cs @@ -0,0 +1,24 @@ +namespace RhSolutions.ExcelExtensions; + +public sealed class TableCell : Table +{ + public Row ParentRow + { + get => ParentTable.Rows[ParentTable.Range.Row - Range.Row]; + } + public Column ParentColumn + { + get => ParentTable.Columns[ParentTable.Range.Column - Range.Column]; + } + public object Value + { + get => Range.Cells[1, 1].Value2; + set => Range.Cells[1, 1].Value2 = value; + } + + public TableCell(Range range, Table table) : base(range, table) + { + Range = range; + ParentTable = table; + } +} diff --git a/RhSolutions.ExcelExtensions/Usings.cs b/RhSolutions.ExcelExtensions/Usings.cs new file mode 100644 index 0000000..94bcc5e --- /dev/null +++ b/RhSolutions.ExcelExtensions/Usings.cs @@ -0,0 +1,3 @@ +global using Microsoft.Office.Interop.Excel; +global using System.Collections.Generic; +global using Range = Microsoft.Office.Interop.Excel.Range; \ No newline at end of file diff --git a/RhSolutions.Tests/ExcelTablesTests.cs b/RhSolutions.Tests/ExcelTablesTests.cs index 3ce71bc..78264ac 100644 --- a/RhSolutions.Tests/ExcelTablesTests.cs +++ b/RhSolutions.Tests/ExcelTablesTests.cs @@ -3,7 +3,7 @@ [ExcelTestSettings(OutOfProcess = true, Workbook = @"TestWorkbooks\ExcelTableTest.xlsx")] public class ExcelTablesTests : IDisposable { - ExcelTable.ExcelTable table; + ExcelExtensions.Table table; public ExcelTablesTests() { diff --git a/RhSolutions.Tests/Usings.cs b/RhSolutions.Tests/Usings.cs index 4b95659..bf19a29 100644 --- a/RhSolutions.Tests/Usings.cs +++ b/RhSolutions.Tests/Usings.cs @@ -1,5 +1,4 @@ -global using Xunit; +global using ExcelDna.Testing; global using Microsoft.Office.Interop.Excel; -global using ExcelDna.Testing; -global using RhSolutions.ExcelTable; global using RhSolutions.Services; +global using Xunit; diff --git a/RhSolutions.sln b/RhSolutions.sln index 8d94b9b..8db9bf3 100644 --- a/RhSolutions.sln +++ b/RhSolutions.sln @@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RhSolutions.AddIn", "RhSolu EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RhSolutions.Tests", "RhSolutions.Tests\RhSolutions.Tests.csproj", "{6EECCDDB-741C-404A-874F-BB8656265162}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RhSolutions.ExcelExtensions", "RhSolutions.ExcelExtensions\RhSolutions.ExcelExtensions.csproj", "{ADB862A8-5CC6-4509-A4F7-9907E84F5801}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {6EECCDDB-741C-404A-874F-BB8656265162}.Debug|Any CPU.Build.0 = Debug|Any CPU {6EECCDDB-741C-404A-874F-BB8656265162}.Release|Any CPU.ActiveCfg = Release|Any CPU {6EECCDDB-741C-404A-874F-BB8656265162}.Release|Any CPU.Build.0 = Release|Any CPU + {ADB862A8-5CC6-4509-A4F7-9907E84F5801}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADB862A8-5CC6-4509-A4F7-9907E84F5801}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADB862A8-5CC6-4509-A4F7-9907E84F5801}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADB862A8-5CC6-4509-A4F7-9907E84F5801}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- cgit v1.2.3