From 7fd139a234dcc2546e065dafff3c97d0444f16e0 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Tue, 23 May 2023 09:26:08 +0300 Subject: [PATCH] Edit amount column looking up --- RhSolutions.AddIn/Services/GuessReader.cs | 60 +++++++++++++++-------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/RhSolutions.AddIn/Services/GuessReader.cs b/RhSolutions.AddIn/Services/GuessReader.cs index 52e53b6..27149c0 100644 --- a/RhSolutions.AddIn/Services/GuessReader.cs +++ b/RhSolutions.AddIn/Services/GuessReader.cs @@ -16,7 +16,7 @@ public class GuessReader : IReader { _progressBar = new("Ищу колонки со значениями", range.Columns.Count); int? productColumnIndex = null; - List<(int, double)> amountColumnIndeces = new(); + List amountColumnIndeces = new(); for (int column = 1; column < range.Columns.Count + 1; column++) { @@ -25,28 +25,47 @@ public class GuessReader : IReader { productColumnIndex = column; } - else if (IsAmountColumn(range.Columns[column], out double average)) + else if (IsAmountColumn(range.Columns[column])) { - amountColumnIndeces.Add((column, average)); + amountColumnIndeces.Add(column); } } - if (productColumnIndex == null || amountColumnIndeces.Count == 0) + if (productColumnIndex == null) { - throw new ArgumentException("Колонка с артикулом или количеством не определена"); + throw new ArgumentException("Колонка с артикулом не определена"); + } + + if (amountColumnIndeces.Count == 0) + { + throw new ArgumentException("Колонка с количеством не определена"); } else if (amountColumnIndeces.Count == 1) { return GetDictionaryFromColumns(range.Columns[productColumnIndex], - range.Columns[amountColumnIndeces.First().Item1]); + range.Columns[amountColumnIndeces.First()]); } else { int amountColumnIndex = amountColumnIndeces - .Where(i => i.Item2 < 30000 && i.Item2 > 0) - .OrderByDescending(i => i.Item2).First().Item1; + .Where(i => i > productColumnIndex) + .FirstOrDefault(); + + if (amountColumnIndex == 0) + { + amountColumnIndex = amountColumnIndeces + .OrderBy(i => i) + .Where(i => i < productColumnIndex) + .LastOrDefault(); + } + + if (amountColumnIndex == 0) + { + throw new ArgumentException("Колонка с количеством не определена"); + } + return GetDictionaryFromColumns(range.Columns[productColumnIndex], range.Columns[amountColumnIndex]); } @@ -84,9 +103,9 @@ public class GuessReader : IReader return successCounter > 0; } - private bool IsAmountColumn(Range column, out double average) + private bool IsAmountColumn(Range column) { - average = 0.0; + int successCounter = 0; object[,] cells = column.Value2; if (cells == null) @@ -94,8 +113,6 @@ public class GuessReader : IReader return false; } - int successCounter = 0; - for (int row = 1; row < column.Rows.Count + 1; row++) { object currentCell = cells[row, 1]; @@ -110,23 +127,26 @@ public class GuessReader : IReader { value = (double)currentCell; } + else if (currentCell.GetType() == typeof(string)) { double.TryParse((string)currentCell, out value); } - if (value != 0.0) + if (value == 0) { - successCounter++; - average += value; + continue; } - } - if (successCounter > 0) - { - average /= successCounter; + + if (value > 30000) + { + return false; + } + + successCounter++; } - return successCounter > 0; + return successCounter > 1; } private Dictionary GetDictionaryFromColumns(Range productColumn, Range amountColumn)