diff options
Diffstat (limited to 'src/PriceListTools/CombineTool.cs')
-rw-r--r-- | src/PriceListTools/CombineTool.cs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/PriceListTools/CombineTool.cs b/src/PriceListTools/CombineTool.cs new file mode 100644 index 0000000..cf02059 --- /dev/null +++ b/src/PriceListTools/CombineTool.cs @@ -0,0 +1,76 @@ +using Microsoft.Office.Interop.Excel; +using System; + +namespace RehauSku.PriceListTools +{ + internal class CombineTool : AbstractPriceListTool, IDisposable + { + public override void FillPriceList() + { + PriceListSheet offer = NewPriceList.OfferSheet; + offer.Sheet.Activate(); + + int exportedValues = 0; + int exportedLists = 0; + + foreach (var priceList in sourcePriceLists) + { + foreach (var sheet in priceList.Sheets) + { + if (sheet.SkuAmount.Count == 0) + continue; + + offer.Sheet.Columns[offer.amountColumnNumber] + .EntireColumn + .Insert(XlInsertShiftDirection.xlShiftToRight, XlInsertFormatOrigin.xlFormatFromRightOrBelow); + + exportedLists++; + + foreach (var kvp in sheet.SkuAmount) + { + Range cell = offer.Sheet.Columns[offer.skuColumnNumber].Find(kvp.Key); + + if (cell == null) + { + System.Windows.Forms.MessageBox.Show + ($"Артикул {kvp.Key} отсутствует в таблице заказов {RegistryUtil.PriceListPath}", + "Отсутствует позиция в конечной таблице заказов", + System.Windows.Forms.MessageBoxButtons.OK, + System.Windows.Forms.MessageBoxIcon.Information); + } + + else + { + offer.Sheet.Cells[cell.Row, offer.amountColumnNumber].Value2 = kvp.Value; + Range sumCell = offer.Sheet.Cells[cell.Row, offer.amountColumnNumber + exportedLists]; + + if (sumCell.Value2 == null) + sumCell.Value2 = kvp.Value; + else + sumCell.Value2 += kvp.Value; + + exportedValues++; + } + + offer.Sheet.Cells[offer.headerRowNumber, offer.amountColumnNumber].Value2 = $"{priceList.Name}\n{sheet.Name}"; + } + } + } + + AutoFilter filter = offer.Sheet.AutoFilter; + int firstFilterColumn = filter.Range.Column; + + filter.Range.AutoFilter(offer.amountColumnNumber - firstFilterColumn + 1 + exportedLists, "<>"); + offer.Sheet.Range["A1"].Activate(); + + AddIn.Excel.StatusBar = $"Экспортировано {exportedValues} строк из {sourcePriceLists.Count} файлов"; + + Forms.Dialog.SaveWorkbookAs(); + } + + public void Dispose() + { + GC.SuppressFinalize(this); + } + } +} |