diff options
author | Sergey Chebotar <s.chebotar@gmail.com> | 2021-12-26 18:22:32 +0300 |
---|---|---|
committer | Sergey Chebotar <s.chebotar@gmail.com> | 2021-12-26 18:22:32 +0300 |
commit | 54fc3320e7d64d7903b4d091fe0d5c15df01fd78 (patch) | |
tree | ac8b9aa1e883a85339a594b2797ab319cca73c4e /src/PriceListTools/PriceList.cs | |
parent | 20cfbfcca3a779c04aecdca5e4b465651e2be42a (diff) |
Move to /src
Diffstat (limited to 'src/PriceListTools/PriceList.cs')
-rw-r--r-- | src/PriceListTools/PriceList.cs | 87 |
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; + } + } + } +} + |