From 448af8ecd7bf9db070e090c4b434da693ba0ae89 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Sat, 1 Apr 2023 15:58:42 +0300 Subject: [PATCH] Move Excel extensions to own project --- RhSolutions.AddIn/RhSolutions.AddIn.csproj | 3 ++ .../Column.cs | 14 +++++----- .../ColumnEnumerator.cs | 12 ++++---- .../Columns.cs | 16 +++++------ .../ColumnsEnumerator.cs | 12 ++++---- .../RhSolutions.ExcelExtensions.csproj | 15 ++++++++++ .../Row.cs | 12 ++++---- .../RowEnumerator.cs | 12 ++++---- .../Rows.cs | 16 +++++------ .../RowsEnumerator.cs | 12 ++++---- .../Table.cs | 28 +++++++++---------- .../TableCell.cs | 10 +++---- RhSolutions.ExcelExtensions/Usings.cs | 3 ++ RhSolutions.Tests/ExcelTablesTests.cs | 2 +- RhSolutions.Tests/Usings.cs | 5 ++-- RhSolutions.sln | 6 ++++ 16 files changed, 102 insertions(+), 76 deletions(-) rename RhSolutions.AddIn/ExcelTable/ExcelColumn.cs => RhSolutions.ExcelExtensions/Column.cs (65%) rename RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs => RhSolutions.ExcelExtensions/ColumnEnumerator.cs (68%) rename RhSolutions.AddIn/ExcelTable/ExcelColumns.cs => RhSolutions.ExcelExtensions/Columns.cs (53%) rename RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs => RhSolutions.ExcelExtensions/ColumnsEnumerator.cs (68%) create mode 100644 RhSolutions.ExcelExtensions/RhSolutions.ExcelExtensions.csproj rename RhSolutions.AddIn/ExcelTable/ExcelRow.cs => RhSolutions.ExcelExtensions/Row.cs (54%) rename RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs => RhSolutions.ExcelExtensions/RowEnumerator.cs (68%) rename RhSolutions.AddIn/ExcelTable/ExcelRows.cs => RhSolutions.ExcelExtensions/Rows.cs (54%) rename RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs => RhSolutions.ExcelExtensions/RowsEnumerator.cs (69%) rename RhSolutions.AddIn/ExcelTable/ExcelTable.cs => RhSolutions.ExcelExtensions/Table.cs (51%) rename RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs => RhSolutions.ExcelExtensions/TableCell.cs (61%) create mode 100644 RhSolutions.ExcelExtensions/Usings.cs 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.AddIn/ExcelTable/ExcelColumn.cs b/RhSolutions.ExcelExtensions/Column.cs similarity index 65% rename from RhSolutions.AddIn/ExcelTable/ExcelColumn.cs rename to RhSolutions.ExcelExtensions/Column.cs index 7d72cd5..53a1f3d 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumn.cs +++ b/RhSolutions.ExcelExtensions/Column.cs @@ -1,8 +1,8 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public sealed class ExcelColumn : ExcelTable, IEnumerable +public sealed class Column : Table, IEnumerable { public string Header { @@ -17,26 +17,26 @@ public sealed class ExcelColumn : ExcelTable, IEnumerable get => Range.Rows.Count; } - public ExcelColumn(Range range, ExcelTable table) : base(range, table) + public Column(Range range, Table table) : base(range, table) { Range = range; ParentTable = table; } - public ExcelTableCell this[int index] + public TableCell this[int index] { get => new(Range.Cells[index + 1, 1], ParentTable); } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { - return new ExcelColumnEnumerator(Range, ParentTable); + return new ColumnEnumerator(Range, ParentTable); } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); - public ExcelColumn AddLeft() + public Column AddLeft() { Range.EntireColumn .Insert(XlInsertShiftDirection.xlShiftToRight, diff --git a/RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs b/RhSolutions.ExcelExtensions/ColumnEnumerator.cs similarity index 68% rename from RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs rename to RhSolutions.ExcelExtensions/ColumnEnumerator.cs index c809c18..9880b5d 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumnEnumerator.cs +++ b/RhSolutions.ExcelExtensions/ColumnEnumerator.cs @@ -1,11 +1,11 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public class ExcelColumnEnumerator : IEnumerator +public class ColumnEnumerator : IEnumerator { public Range Range { get; } - public ExcelTable ParentTable { get; } + public Table ParentTable { get; } private int position = 0; object IEnumerator.Current { @@ -15,13 +15,13 @@ public class ExcelColumnEnumerator : IEnumerator } } - public ExcelTableCell Current + public TableCell Current { get { try { - return new ExcelTableCell(Range.Cells[position, 1], ParentTable); + return new TableCell(Range.Cells[position, 1], ParentTable); } catch (IndexOutOfRangeException) { @@ -30,7 +30,7 @@ public class ExcelColumnEnumerator : IEnumerator } } - public ExcelColumnEnumerator(Range range, ExcelTable table) + public ColumnEnumerator(Range range, Table table) { Range = range; ParentTable = table; diff --git a/RhSolutions.AddIn/ExcelTable/ExcelColumns.cs b/RhSolutions.ExcelExtensions/Columns.cs similarity index 53% rename from RhSolutions.AddIn/ExcelTable/ExcelColumns.cs rename to RhSolutions.ExcelExtensions/Columns.cs index 4aacd6f..1fbc0ef 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumns.cs +++ b/RhSolutions.ExcelExtensions/Columns.cs @@ -1,23 +1,23 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public class ExcelColumns : IEnumerable +public class Columns : IEnumerable { public Range Range { get; } - public ExcelTable ParentTable { get; } + public Table ParentTable { get; } public int Length { get => Range.Columns.Count; } - public ExcelColumns(Range range, ExcelTable parentTable) + public Columns(Range range, Table parentTable) { Range = range; ParentTable = parentTable; } - public ExcelColumn this[int index] + public Column this[int index] { get { @@ -26,13 +26,13 @@ public class ExcelColumns : IEnumerable throw new IndexOutOfRangeException(); } - return new ExcelColumn(Range.Columns[index + 1], ParentTable); + return new Column(Range.Columns[index + 1], ParentTable); } } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { - return new ExcelColumnsEnumerator(Range, ParentTable); + return new ColumnsEnumerator(Range, ParentTable); } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); diff --git a/RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs b/RhSolutions.ExcelExtensions/ColumnsEnumerator.cs similarity index 68% rename from RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs rename to RhSolutions.ExcelExtensions/ColumnsEnumerator.cs index 8c351e9..578e2b0 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelColumnsEnumerator.cs +++ b/RhSolutions.ExcelExtensions/ColumnsEnumerator.cs @@ -1,11 +1,11 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public class ExcelColumnsEnumerator: IEnumerator +public class ColumnsEnumerator: IEnumerator { public Range Range { get; } - public ExcelTable ParentTable { get; } + public Table ParentTable { get; } private int position = 0; object IEnumerator.Current { @@ -15,13 +15,13 @@ public class ExcelColumnsEnumerator: IEnumerator } } - public ExcelColumn Current + public Column Current { get { try { - return new ExcelColumn(Range.Columns[position], ParentTable); + return new Column(Range.Columns[position], ParentTable); } catch (IndexOutOfRangeException) { @@ -30,7 +30,7 @@ public class ExcelColumnsEnumerator: IEnumerator } } - public ExcelColumnsEnumerator(Range range, ExcelTable table) + public ColumnsEnumerator(Range range, Table table) { Range = range; ParentTable = table; 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.AddIn/ExcelTable/ExcelRow.cs b/RhSolutions.ExcelExtensions/Row.cs similarity index 54% rename from RhSolutions.AddIn/ExcelTable/ExcelRow.cs rename to RhSolutions.ExcelExtensions/Row.cs index 231fd7c..32617b4 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelRow.cs +++ b/RhSolutions.ExcelExtensions/Row.cs @@ -1,8 +1,8 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public sealed class ExcelRow : ExcelTable, IEnumerable +public sealed class Row : Table, IEnumerable { public int Index { @@ -13,20 +13,20 @@ public sealed class ExcelRow : ExcelTable, IEnumerable get => Range.Columns.Count; } - public ExcelRow(Range range, ExcelTable table) : base(range, table) + public Row(Range range, Table table) : base(range, table) { Range = range; ParentTable = table; } - public ExcelTableCell this[int index] + public TableCell this[int index] { get => new(Range.Cells[1, index + 1], ParentTable); } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { - return new ExcelRowEnumerator(Range, ParentTable); + return new RowEnumerator(Range, ParentTable); } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); diff --git a/RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs b/RhSolutions.ExcelExtensions/RowEnumerator.cs similarity index 68% rename from RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs rename to RhSolutions.ExcelExtensions/RowEnumerator.cs index 58f88d8..fd56dcd 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelRowEnumerator.cs +++ b/RhSolutions.ExcelExtensions/RowEnumerator.cs @@ -1,11 +1,11 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public class ExcelRowEnumerator : IEnumerator +public class RowEnumerator : IEnumerator { public Range Range { get; } - public ExcelTable ParentTable { get; } + public Table ParentTable { get; } private int position = 0; object IEnumerator.Current { @@ -15,13 +15,13 @@ public class ExcelRowEnumerator : IEnumerator } } - public ExcelTableCell Current + public TableCell Current { get { try { - return new ExcelTableCell(Range.Cells[1, position], ParentTable); + return new TableCell(Range.Cells[1, position], ParentTable); } catch (IndexOutOfRangeException) { @@ -30,7 +30,7 @@ public class ExcelRowEnumerator : IEnumerator } } - public ExcelRowEnumerator(Range range, ExcelTable parentTable) + public RowEnumerator(Range range, Table parentTable) { Range = range; ParentTable = parentTable; diff --git a/RhSolutions.AddIn/ExcelTable/ExcelRows.cs b/RhSolutions.ExcelExtensions/Rows.cs similarity index 54% rename from RhSolutions.AddIn/ExcelTable/ExcelRows.cs rename to RhSolutions.ExcelExtensions/Rows.cs index 44602f0..1c0bc0d 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelRows.cs +++ b/RhSolutions.ExcelExtensions/Rows.cs @@ -1,23 +1,23 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public class ExcelRows : IEnumerable +public class Rows : IEnumerable { public Range Range { get; } - public ExcelTable ParentTable { get; } + public Table ParentTable { get; } public int Length { get => Range.Rows.Count; } - public ExcelRows(Range range, ExcelTable parentTable) + public Rows(Range range, Table parentTable) { Range = range; ParentTable = parentTable; } - public ExcelRow this[int index] + public Row this[int index] { get { @@ -26,13 +26,13 @@ public class ExcelRows : IEnumerable throw new IndexOutOfRangeException(); } - return new ExcelRow(Range.Rows[index + 1], ParentTable); + return new Row(Range.Rows[index + 1], ParentTable); } } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { - return new ExcelRowsEnumerator(Range, ParentTable); + return new RowsEnumerator(Range, ParentTable); } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); diff --git a/RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs b/RhSolutions.ExcelExtensions/RowsEnumerator.cs similarity index 69% rename from RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs rename to RhSolutions.ExcelExtensions/RowsEnumerator.cs index e5430d1..b53db98 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelRowsEnumerator.cs +++ b/RhSolutions.ExcelExtensions/RowsEnumerator.cs @@ -1,11 +1,11 @@ using System.Collections; -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public class ExcelRowsEnumerator : IEnumerator +public class RowsEnumerator : IEnumerator { public Range Range { get; } - public ExcelTable ParentTable { get; } + public Table ParentTable { get; } private int position = 0; object IEnumerator.Current { @@ -15,13 +15,13 @@ public class ExcelRowsEnumerator : IEnumerator } } - public ExcelRow Current + public Row Current { get { try { - return new ExcelRow(Range.Rows[position], ParentTable); + return new Row(Range.Rows[position], ParentTable); } catch (IndexOutOfRangeException) { @@ -30,7 +30,7 @@ public class ExcelRowsEnumerator : IEnumerator } } - public ExcelRowsEnumerator(Range range, ExcelTable table) + public RowsEnumerator(Range range, Table table) { Range = range; ParentTable = table; diff --git a/RhSolutions.AddIn/ExcelTable/ExcelTable.cs b/RhSolutions.ExcelExtensions/Table.cs similarity index 51% rename from RhSolutions.AddIn/ExcelTable/ExcelTable.cs rename to RhSolutions.ExcelExtensions/Table.cs index 2788036..a19a4b4 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelTable.cs +++ b/RhSolutions.ExcelExtensions/Table.cs @@ -1,34 +1,34 @@ -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public class ExcelTable +public class Table { public Range Range { get; protected set; } - public ExcelTable ParentTable { get; protected set; } - public ExcelRows Rows { get; } - public ExcelColumns Columns { get; } + public Table ParentTable { get; protected set; } + public Rows Rows { get; } + public Columns Columns { get; } - public ExcelTable(Range range) + public Table(Range range) { Range = range; ParentTable = null; - Rows = new ExcelRows(Range, this); - Columns = new ExcelColumns(Range, this); + Rows = new Rows(Range, this); + Columns = new Columns(Range, this); } - public ExcelTable(Range range, ExcelTable table) + public Table(Range range, Table table) { Range = range; ParentTable = table; - Rows = new ExcelRows(Range, this); - Columns = new ExcelColumns(Range, this); + Rows = new Rows(Range, this); + Columns = new Columns(Range, this); } - public ExcelTableCell this[int row, int column] + public TableCell this[int row, int column] { get => new(Range.Cells[row + 1, column + 1], this); } - public IEnumerable Find(object item) + public IEnumerable Find(object item) { Range firstFound = Range.Find(item); if (firstFound == null) @@ -40,7 +40,7 @@ public class ExcelTable while (true) { - yield return new ExcelTableCell(nextFound, ParentTable ?? this); + yield return new TableCell(nextFound, ParentTable ?? this); nextFound = Range.FindNext(nextFound); if (nextFound.Row == firstFound.Row diff --git a/RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs b/RhSolutions.ExcelExtensions/TableCell.cs similarity index 61% rename from RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs rename to RhSolutions.ExcelExtensions/TableCell.cs index 8f742d2..822673e 100644 --- a/RhSolutions.AddIn/ExcelTable/ExcelTableCell.cs +++ b/RhSolutions.ExcelExtensions/TableCell.cs @@ -1,12 +1,12 @@ -namespace RhSolutions.ExcelTable; +namespace RhSolutions.ExcelExtensions; -public sealed class ExcelTableCell : ExcelTable +public sealed class TableCell : Table { - public ExcelRow ParentRow + public Row ParentRow { get => ParentTable.Rows[ParentTable.Range.Row - Range.Row]; } - public ExcelColumn ParentColumn + public Column ParentColumn { get => ParentTable.Columns[ParentTable.Range.Column - Range.Column]; } @@ -16,7 +16,7 @@ public sealed class ExcelTableCell : ExcelTable set => Range.Cells[1, 1].Value2 = value; } - public ExcelTableCell(Range range, ExcelTable table) : base(range, table) + 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