Add Result Statusbar message

This commit is contained in:
Sergey Chebotar 2022-02-04 09:17:12 +03:00
parent ef04747df5
commit 6e889419e2
11 changed files with 157 additions and 55 deletions

View File

@ -0,0 +1,11 @@
using Microsoft.Office.Interop.Excel;
namespace RehauSku.Interface
{
internal abstract class AbstractBar
{
protected Application Excel = AddIn.Excel;
public abstract void Update();
}
}

View File

@ -1,10 +1,7 @@
using Microsoft.Office.Interop.Excel; namespace RehauSku.Interface
namespace RehauSku.Interface
{ {
internal class ProgressBar internal class ProgressBar : AbstractBar
{ {
private Application Excel = AddIn.Excel;
private double CurrentProgress { get; set; } private double CurrentProgress { get; set; }
private readonly double TaskWeight; private readonly double TaskWeight;
private readonly string Message; private readonly string Message;
@ -16,7 +13,7 @@ namespace RehauSku.Interface
CurrentProgress = 0; CurrentProgress = 0;
} }
public void DoProgress() public override void Update()
{ {
double percent = (++CurrentProgress / TaskWeight) * 100; double percent = (++CurrentProgress / TaskWeight) * 100;

View File

@ -0,0 +1,44 @@
using System.Text;
namespace RehauSku.Interface
{
internal class ResultBar : AbstractBar
{
private int Success { get; set; }
private int Replaced { get; set; }
private int NotFound { get; set; }
public ResultBar()
{
Success = 0;
Replaced = 0;
NotFound = 0;
}
public void IncrementSuccess() => Success++;
public void IncrementReplaced() => Replaced++;
public void IncrementNotFound() => NotFound++;
public override void Update()
{
StringBuilder sb = new StringBuilder();
if (Success > 0)
{
sb.Append($"Успешно экспортировано {Success} артикулов. ");
}
if (Replaced > 0)
{
sb.Append($"Заменено {Replaced} артикулов. ");
}
if (NotFound > 0)
{
sb.Append($"Не найдено {NotFound} артикулов.");
}
Excel.StatusBar = sb.ToString();
}
}
}

View File

@ -1,9 +1,11 @@
using ExcelDna.Integration; using ExcelDna.Integration;
using Microsoft.Office.Interop.Excel; using Microsoft.Office.Interop.Excel;
using RehauSku.Interface;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
using Application = Microsoft.Office.Interop.Excel.Application; using Application = Microsoft.Office.Interop.Excel.Application;
using ProgressBar = RehauSku.Interface.ProgressBar;
namespace RehauSku.PriceListTools namespace RehauSku.PriceListTools
{ {
@ -11,6 +13,8 @@ namespace RehauSku.PriceListTools
{ {
protected private Application ExcelApp = (Application)ExcelDnaUtil.Application; protected private Application ExcelApp = (Application)ExcelDnaUtil.Application;
protected private TargetPriceList TargetFile; protected private TargetPriceList TargetFile;
protected private ResultBar ResultBar { get; set; }
protected private ProgressBar ProgressBar { get; set; }
public void OpenNewPrice() public void OpenNewPrice()
{ {
@ -53,72 +57,96 @@ namespace RehauSku.PriceListTools
sumCell.Value2 += positionAmount.Value; sumCell.Value2 += positionAmount.Value;
} }
} }
ResultBar.IncrementSuccess();
return;
} }
else if (TargetFile.oldSkuCell != null)
{ {
string sku = positionAmount.Key.Sku.Substring(1, 6); Range foundCell = TargetFile.oldSkuCell.EntireColumn.Find(positionAmount.Key.Sku);
row = GetPositionRow(sku, positionAmount.Key.Group, TargetFile.skuCell.Column); if (foundCell != null)
if (row != null)
{ {
row = foundCell.Row;
foreach (int column in columns) foreach (int column in columns)
{ {
Range amountCell = TargetFile.Sheet.Cells[row, column]; if (TargetFile.Sheet.Cells[row, column].Value2 == null)
if (amountCell.Value2 == null)
{ {
amountCell.Value2 = positionAmount.Value; TargetFile.Sheet.Cells[row, column].Value2 = positionAmount.Value;
} }
else else
{ {
amountCell.Value2 += positionAmount.Value; TargetFile.Sheet.Cells[row, column].Value2 += positionAmount.Value;
} }
}
Range oldSkuCell = TargetFile.Sheet.Cells[row, TargetFile.oldSkuCell.Column]; ResultBar.IncrementReplaced();
oldSkuCell.Value2 = positionAmount.Key.Sku; return;
}
}
string sku = positionAmount.Key.Sku.Substring(1, 6);
row = GetPositionRow(sku, positionAmount.Key.Group, TargetFile.skuCell.Column);
if (row != null)
{
foreach (int column in columns)
{
Range amountCell = TargetFile.Sheet.Cells[row, column];
if (amountCell.Value2 == null)
{
amountCell.Value2 = positionAmount.Value;
}
else
{
amountCell.Value2 += positionAmount.Value;
} }
} }
else ResultBar.IncrementReplaced();
{ return;
FillMissing(positionAmount, columns); }
}
else
{
FillMissing(positionAmount, columns);
ResultBar.IncrementNotFound();
} }
} }
protected private void FillMissing(KeyValuePair<Position, double> positionAmount, params int[] columns) protected private void FillMissing(KeyValuePair<Position, double> positionAmount, params int[] columns)
{ {
Range foundCell = TargetFile.oldSkuCell.EntireColumn.Find(positionAmount.Key.Sku); int row = TargetFile.Sheet.Cells[TargetFile.Sheet.Rows.Count, TargetFile.skuCell.Column]
int row; .End[XlDirection.xlUp]
.Row + 1;
if (foundCell == null) TargetFile.Sheet.Rows[row]
.EntireRow
.Insert(XlInsertShiftDirection.xlShiftDown, XlInsertFormatOrigin.xlFormatFromLeftOrAbove);
Range previous = TargetFile.Sheet.Rows[row - 1];
Range current = TargetFile.Sheet.Rows[row];
previous.Copy(current);
current.ClearContents();
TargetFile.Sheet.Cells[row, TargetFile.groupCell.Column].Value2 = positionAmount.Key.Group;
TargetFile.Sheet.Cells[row, TargetFile.nameCell.Column].Value2 = positionAmount.Key.Name;
if (TargetFile.oldSkuCell != null)
{ {
row = TargetFile.Sheet.Cells[TargetFile.Sheet.Rows.Count, TargetFile.skuCell.Column]
.End[XlDirection.xlUp]
.Row + 1;
TargetFile.Sheet.Rows[row]
.EntireRow
.Insert(XlInsertShiftDirection.xlShiftDown, XlInsertFormatOrigin.xlFormatFromLeftOrAbove);
Range previous = TargetFile.Sheet.Rows[row - 1];
Range current = TargetFile.Sheet.Rows[row];
previous.Copy(current);
current.ClearContents();
TargetFile.Sheet.Cells[row, TargetFile.groupCell.Column].Value2 = positionAmount.Key.Group;
TargetFile.Sheet.Cells[row, TargetFile.oldSkuCell.Column].Value2 = positionAmount.Key.Sku;
TargetFile.Sheet.Cells[row, TargetFile.nameCell.Column].Value2 = positionAmount.Key.Name;
TargetFile.Sheet.Cells[row, TargetFile.skuCell.Column].Value2 = "Не найден"; TargetFile.Sheet.Cells[row, TargetFile.skuCell.Column].Value2 = "Не найден";
TargetFile.Sheet.Cells[row, TargetFile.oldSkuCell.Column].Value2 = positionAmount.Key.Sku;
} }
else else
{ {
row = foundCell.Row; TargetFile.Sheet.Cells[row, TargetFile.skuCell.Column].Value2 = positionAmount.Key.Sku;
} }
foreach (int column in columns) foreach (int column in columns)

View File

@ -11,7 +11,8 @@ namespace RehauSku.PriceListTools
public void FillTarget() public void FillTarget()
{ {
ProgressBar bar = new ProgressBar("Заполняю строки...", SourceFiles.Sum(file => file.PositionAmount.Count)); ProgressBar = new ProgressBar("Заполняю строки...", SourceFiles.Sum(file => file.PositionAmount.Count));
ResultBar = new ResultBar();
foreach (SourcePriceList source in SourceFiles) foreach (SourcePriceList source in SourceFiles)
{ {
@ -26,13 +27,15 @@ namespace RehauSku.PriceListTools
foreach (var kvp in source.PositionAmount) foreach (var kvp in source.PositionAmount)
{ {
FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column - 1, TargetFile.amountCell.Column); FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column - 1, TargetFile.amountCell.Column);
bar.DoProgress(); ProgressBar.Update();
} }
} }
FilterByAmount(); FilterByAmount();
ResultBar.Update();
Interface.Dialog.SaveWorkbookAs(); Interface.Dialog.SaveWorkbookAs();
ExcelApp.StatusBar = false;
} }
} }
} }

View File

@ -27,17 +27,20 @@ namespace RehauSku.PriceListTools
public void FillTarget() public void FillTarget()
{ {
ProgressBar bar = new ProgressBar("Заполняю строки...", Current.PositionAmount.Count); ProgressBar = new ProgressBar("Заполняю строки...", Current.PositionAmount.Count);
ResultBar = new ResultBar();
foreach (var kvp in Current.PositionAmount) foreach (var kvp in Current.PositionAmount)
{ {
FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column); FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column);
bar.DoProgress(); ProgressBar.Update();
} }
FilterByAmount(); FilterByAmount();
ResultBar.Update();
Dialog.SaveWorkbookAs(); Dialog.SaveWorkbookAs();
ExcelApp.StatusBar = false;
} }
} }
} }

View File

@ -24,17 +24,20 @@ namespace RehauSku.PriceListTools
public void FillTarget() public void FillTarget()
{ {
GetSelected(); GetSelected();
ProgressBar bar = new ProgressBar("Заполняю строки...", PositionAmount.Count); ProgressBar = new ProgressBar("Заполняю строки...", PositionAmount.Count);
ResultBar = new ResultBar();
foreach (var kvp in PositionAmount) foreach (var kvp in PositionAmount)
{ {
FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column); FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column);
bar.DoProgress(); ProgressBar.Update();
} }
FilterByAmount(); FilterByAmount();
ResultBar.Update();
Interface.Dialog.SaveWorkbookAs(); Interface.Dialog.SaveWorkbookAs();
ExcelApp.StatusBar = false;
} }
private void GetSelected() private void GetSelected()

View File

@ -10,20 +10,23 @@ namespace RehauSku.PriceListTools
public void FillTarget() public void FillTarget()
{ {
ProgressBar bar = new ProgressBar("Заполняю строки...", SourceFiles.Sum(x => x.PositionAmount.Count)); ProgressBar = new ProgressBar("Заполняю строки...", SourceFiles.Sum(x => x.PositionAmount.Count));
ResultBar = new ResultBar();
foreach (SourcePriceList source in SourceFiles) foreach (SourcePriceList source in SourceFiles)
{ {
foreach (var kvp in source.PositionAmount) foreach (var kvp in source.PositionAmount)
{ {
FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column); FillPositionAmountToColumns(kvp, TargetFile.amountCell.Column);
bar.DoProgress(); ProgressBar.Update();
} }
} }
FilterByAmount(); FilterByAmount();
ResultBar.Update();
Dialog.SaveWorkbookAs(); Dialog.SaveWorkbookAs();
ExcelApp.StatusBar = false;
} }
} }
} }

View File

@ -4,6 +4,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using RehauSku.Interface; using RehauSku.Interface;
using RehauSku.Assistant;
namespace RehauSku.PriceListTools namespace RehauSku.PriceListTools
{ {
@ -53,7 +54,7 @@ namespace RehauSku.PriceListTools
SourcePriceList priceList = new SourcePriceList(wb); SourcePriceList priceList = new SourcePriceList(wb);
sourceFiles.Add(priceList); sourceFiles.Add(priceList);
wb.Close(); wb.Close();
bar.DoProgress(); bar.Update();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -63,7 +64,7 @@ namespace RehauSku.PriceListTools
System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Information); System.Windows.Forms.MessageBoxIcon.Information);
wb.Close(); wb.Close();
bar.DoProgress(); bar.Update();
} }
ExcelApp.ScreenUpdating = true; ExcelApp.ScreenUpdating = true;
} }
@ -85,6 +86,12 @@ namespace RehauSku.PriceListTools
object name = Sheet.Cells[row, nameCell.Column].Value2; object name = Sheet.Cells[row, nameCell.Column].Value2;
object sku = Sheet.Cells[row, skuCell.Column].Value2; object sku = Sheet.Cells[row, skuCell.Column].Value2;
if (group == null || name == null || sku == null)
continue;
if (!sku.ToString().IsRehauSku())
continue;
Position p = new Position(group.ToString(), sku.ToString(), name.ToString()); Position p = new Position(group.ToString(), sku.ToString(), name.ToString());
if (PositionAmount.ContainsKey(p)) if (PositionAmount.ContainsKey(p))

View File

@ -19,10 +19,11 @@ namespace RehauSku.PriceListTools
amountCell = Sheet.Cells.Find(amountHeader), amountCell = Sheet.Cells.Find(amountHeader),
skuCell = Sheet.Cells.Find(skuHeader), skuCell = Sheet.Cells.Find(skuHeader),
groupCell = Sheet.Cells.Find(groupHeader), groupCell = Sheet.Cells.Find(groupHeader),
nameCell = Sheet.Cells.Find(nameHeader), nameCell = Sheet.Cells.Find(nameHeader)
oldSkuCell = Sheet.Cells.Find(oldSkuHeader)
}; };
oldSkuCell = Sheet.Cells.Find(oldSkuHeader);
if (cells.Any(x => x == null)) if (cells.Any(x => x == null))
{ {
throw new ArgumentException($"Шаблон { Name } не является прайс-листом"); throw new ArgumentException($"Шаблон { Name } не является прайс-листом");

View File

@ -115,6 +115,7 @@
<Reference Include="WindowsBase" /> <Reference Include="WindowsBase" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Interface\AbstractBar.cs" />
<Compile Include="Interface\Dialog.cs" /> <Compile Include="Interface\Dialog.cs" />
<Compile Include="AddIn\RegistryUtil.cs" /> <Compile Include="AddIn\RegistryUtil.cs" />
<Compile Include="AddIn\MemoryCacheUtil.cs" /> <Compile Include="AddIn\MemoryCacheUtil.cs" />
@ -122,6 +123,7 @@
<Compile Include="Assistant\RequestModifier.cs" /> <Compile Include="Assistant\RequestModifier.cs" />
<Compile Include="Assistant\SkuExtensions.cs" /> <Compile Include="Assistant\SkuExtensions.cs" />
<Compile Include="Interface\ProgressBar.cs" /> <Compile Include="Interface\ProgressBar.cs" />
<Compile Include="Interface\ResultBar.cs" />
<Compile Include="PriceListTools\CombineTool.cs" /> <Compile Include="PriceListTools\CombineTool.cs" />
<Compile Include="PriceListTools\ConvertTool.cs" /> <Compile Include="PriceListTools\ConvertTool.cs" />
<Compile Include="PriceListTools\Position.cs" /> <Compile Include="PriceListTools\Position.cs" />