aboutsummaryrefslogtreecommitdiff
path: root/src/PriceListTools/PriceList.cs
diff options
context:
space:
mode:
authorSergey Chebotar <s.chebotar@gmail.com>2021-12-26 18:22:32 +0300
committerSergey Chebotar <s.chebotar@gmail.com>2021-12-26 18:22:32 +0300
commit54fc3320e7d64d7903b4d091fe0d5c15df01fd78 (patch)
treeac8b9aa1e883a85339a594b2797ab319cca73c4e /src/PriceListTools/PriceList.cs
parent20cfbfcca3a779c04aecdca5e4b465651e2be42a (diff)
Move to /src
Diffstat (limited to 'src/PriceListTools/PriceList.cs')
-rw-r--r--src/PriceListTools/PriceList.cs87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/PriceListTools/PriceList.cs b/src/PriceListTools/PriceList.cs
new file mode 100644
index 0000000..1460c07
--- /dev/null
+++ b/src/PriceListTools/PriceList.cs
@@ -0,0 +1,87 @@
+using Microsoft.Office.Interop.Excel;
+using System.Collections.Generic;
+
+namespace RehauSku.PriceListTools
+{
+ class PriceList
+ {
+ public readonly Workbook Workbook;
+ public readonly PriceListSheet OfferSheet;
+ public readonly PriceListSheet ActiveSheet;
+
+ private const string _amountHeader = "Кол-во";
+ private const string _skuHeader = "Актуальный материал";
+ private const string _offerSheetHeader = "КП";
+
+ public PriceList(Workbook workbook)
+ {
+ Workbook = workbook;
+ OfferSheet = new PriceListSheet(workbook.Sheets[_offerSheetHeader]);
+
+ Worksheet active = workbook.ActiveSheet;
+
+ if (active.Name == _offerSheetHeader)
+ ActiveSheet = OfferSheet;
+
+ else
+ ActiveSheet = new PriceListSheet(active);
+ }
+
+ public bool IsValid()
+ {
+ return OfferSheet.IsValid() &&
+ ActiveSheet.IsValid();
+ }
+
+ public void Fill(Dictionary<string, double> values)
+ {
+ Worksheet ws = OfferSheet.sheet;
+ ws.Activate();
+
+ int amountColumn = OfferSheet.amountColumn.Value;
+ int skuColumn = OfferSheet.skuColumn.Value;
+
+ foreach (KeyValuePair<string, double> kvp in values)
+ {
+ Range cell = ws.Columns[skuColumn].Find(kvp.Key);
+ ws.Cells[cell.Row, amountColumn].Value = kvp.Value;
+ }
+
+ AutoFilter filter = ws.AutoFilter;
+ int firstFilterColumn = filter.Range.Column;
+
+ filter.Range.AutoFilter(amountColumn - firstFilterColumn + 1, "<>");
+ ws.Range["A1"].Activate();
+ }
+
+ public class PriceListSheet
+ {
+ public readonly Worksheet sheet;
+ public readonly int? headerRow;
+ public readonly int? amountColumn;
+ public readonly int? skuColumn;
+ public object[,] amountCells;
+ public object[,] skuCells;
+
+ public PriceListSheet(Worksheet sheet)
+ {
+ this.sheet = sheet;
+ headerRow = sheet.Cells.Find(_amountHeader).Row;
+ amountColumn = sheet.Cells.Find(_amountHeader).Column;
+ skuColumn = sheet.Cells.Find(_skuHeader).Column;
+
+ amountCells = sheet.Columns[amountColumn].Value2;
+ skuCells = sheet.Columns[skuColumn].Value2;
+ }
+
+ public bool IsValid()
+ {
+ return sheet != null &&
+ headerRow != null &&
+ amountColumn != null &&
+ skuColumn != null;
+ }
+ }
+ }
+}
+