Beispiel #1
0
        public Pivot(IProgressBarWithLogUI pb)
        {
            this.pb = pb;
            Excel.Workbook wb = _app.ActiveWorkbook;
            SheetUrv12      = ExcelHelper.GetSheet(wb, "Урв12");
            SheetUrv11      = ExcelHelper.GetSheet(wb, "Урв11");
            _SheetPalette   = ExcelHelper.GetSheet(wb, "Палитра");
            _projectManager = new ProjectManager.ProjectManager();
            _project        = _projectManager.ActiveProject;
            string analisysSheetName = _project.AnalysisSheetName;

            _AnalisysSheet = ExcelHelper.GetSheet(wb, analisysSheetName);
        }
Beispiel #2
0
 /// <summary>
 /// Нумерация
 /// </summary>
 /// <param name="numberer"></param>
 /// <param name="pb"></param>
 public void Numeric(Numberer numberer, IProgressBarWithLogUI pb)
 {
     foreach (var item in _items)
     {
         if (pb?.IsAborted ?? false)
         {
             break;
         }
         pb?.SubBarTick();
         item.Number = numberer.GetNextNumber();
         item.Numeric(numberer.GetNextLevel(), pb);
     }
 }
Beispiel #3
0
        /// <summary>
        /// Печать КП
        /// </summary>
        /// <param name="offer"></param>
        internal void Print(IProgressBarWithLogUI pb, string offerSettingsName)
        {
            // Ищем настройки столбцов
            OfferSettings offerSettings = _offerManager.Mappings.Find(s => s.Name == offerSettingsName);

            pb.Writeline($"Выбор листа {offerSettings.SheetName}");
            // Лист данных КП

            Excel.Worksheet offerSheet = ExcelHelper.GetSheet(_offerBook, offerSettings.SheetName);
            pb.Writeline("Разгруппировка строк");
            ShowSheetRows(offerSheet);

            ListAnalysis SheetAnalysis = new ListAnalysis(_sheetProject, _CurrentProject);

            pb.Writeline("Адресация полей");
            /// Адресация полей КП
            List <FieldAddress> addresslist = GetFields(offerSettings, SheetAnalysis.ColumnStartPrint);

            Excel.Worksheet tamplateSheet = ExcelHelper.GetSheet(_wb, "Шаблоны");
            pb.Writeline("Печать заголовков");
            SheetAnalysis.PrintTitle(tamplateSheet, addresslist);


            int lastRowOffer = offerSheet.UsedRange.Row + offerSheet.UsedRange.Rows.Count - 1;

            pb.Writeline("Чтение массива данных");
            // Массив загружаемых данных
            object[,] arrData = GetArrData(offerSheet, offerSettings.RowStart, lastRowOffer);

            int countRows = lastRowOffer - offerSettings.RowStart + 1;

            pb.SetSubBarVolume(countRows);
            pb.Writeline("Вывод строк");
            for (int i = 1; i <= countRows; i++)
            {
                pb.SubBarTick();
                if (pb.IsAborted)
                {
                    throw new AddInException("Процесс остановлен.");
                }

                Record offerRecord = new Record
                {
                    Addresslist = addresslist
                };
                // Сбор данных
                foreach (FieldAddress field in addresslist)
                {
                    object val  = arrData[i, field.ColumnOffer];
                    string text = val?.ToString() ?? "";

                    offerRecord.Values.Add(field.ColumnPaste, val);
                    if (field.MappingAnalysis.Name == Project.ColumnsNames[StaticColumns.Level])
                    {
                        offerRecord.Level = int.TryParse(text, out int lvl) ? lvl : 0;
                    }
                    if (field.MappingAnalysis.Name == Project.ColumnsNames[StaticColumns.Number])
                    {
                        offerRecord.Number = text;
                    }
                    if (field.MappingAnalysis.Check)
                    {
                        offerRecord.KeyFilds.Add(text);
                    }
                }

                SheetAnalysis.PrintRecord(offerRecord);
            }
            pb.Writeline("Группировка столбцов");
            SheetAnalysis.GroupColumn();
            if (pb.IsAborted)
            {
                throw new AddInException("Процесс остановлен.");
            }
            pb.Writeline("Формулы \"Комментарии Спектрум к заявке участника\"");
        }
Beispiel #4
0
        /// <summary>
        /// Печать КП
        /// </summary>
        /// <param name="offer"></param>
        internal void PrintBaseEstimate(IProgressBarWithLogUI pb, string offerSettingsName)
        {
            OfferSettings offerSettings = _offerManager.Mappings.Find(s => s.Name == offerSettingsName);

            Excel.Worksheet offerSheet = ExcelHelper.GetSheet(_offerBook, offerSettings.SheetName);

            ShowSheetRows(offerSheet);
            _sheetProject = ExcelHelper.GetSheet(_wb, _CurrentProject.AnalysisSheetName);

            /// Столбец "номер п.п."
            OfferColumnMapping colNumber = offerSettings.Columns.Find(x => x.Name == Project.ColumnsNames[StaticColumns.Number]);
            int lastRow = GetLastRow(offerSheet, colNumber.ColumnSymbol);

            int countRows = lastRow - offerSettings.RowStart + 1;

            pb.SetSubBarVolume(countRows);///100-1

            List <(int, int)> colPair = new List <(int projectCollumn, int offerColumn)>();
            int rightColumn           = 10;

            foreach (OfferColumnMapping col in offerSettings.Columns)
            {
                if (string.IsNullOrEmpty(col.ColumnSymbol))
                {
                    continue;
                }
                ColumnMapping projectColumn = _CurrentProject.Columns.Find(a => a.Name == col.Name);
                if (!string.IsNullOrWhiteSpace(projectColumn?.ColumnSymbol ?? ""))
                {
                    int cnP = ExcelHelper.GetColumn(projectColumn.ColumnSymbol, _sheetProject);
                    int cnO = ExcelHelper.GetColumn(col.ColumnSymbol, _sheetProject);
                    colPair.Add((cnP, cnO));
                    if (rightColumn < cnO)
                    {
                        rightColumn = cnO;
                    }
                }
            }

            Excel.Range RngData = offerSheet.Range[offerSheet.Cells[offerSettings.RowStart, 1], offerSheet.Cells[lastRow, rightColumn]];
            object[,] arrData = RngData.Value;
            for (int i = 1; i <= countRows; i++)
            {
                int rowPaste = _CurrentProject.RowStart + i - 1;
                pb.SubBarTick();
                if (pb.IsAborted)
                {
                    return;
                }
                foreach ((int projectCollumn, int offerColumn) in colPair)
                {
                    object      val       = arrData[i, offerColumn];
                    string      text      = val?.ToString() ?? "";
                    Excel.Range cellPrint = _sheetProject.Cells[rowPaste, projectCollumn];
                    if (double.TryParse(text, out double number))
                    {
                        cellPrint.Value = Math.Round(number, 2);
                    }
                    else if (!string.IsNullOrEmpty(text))
                    {
                        cellPrint.Value = text;
                    }
                }
            }
            pb.ClearSubBar();
        }
Beispiel #5
0
 /// <summary>
 /// Перекрашивает таблицу, используя палитру. Для второго этапа
 /// </summary>
 /// <param name="ws">Лист в котором будет произведена закраска</param>
 /// <param name="pallets">Палитра</param>
 /// <param name="startRow">Начальная строка с которой идет перекраска</param>
 /// <param name="levelColumn">Буквенное имя столбца в котором проставлены уровни</param>
 /// <param name="pb">Прогресс бар. Колличество нужно инициализировать до вызова метода</param>
 /// <param name="columns">Набор юуквенных имен колонок (нач, кон), (начб кон)... в которых будет производится покраска</param>
 public static void Repaint(Excel.Worksheet ws, Dictionary <string, Excel.Range> pallets, int startRow, string levelColumn, IProgressBarWithLogUI pb, params (string, string)[] columns)
Beispiel #6
0
        /// <summary>
        /// Перекрашивает таблицу, используя палитру
        /// </summary>
        /// <remarks>В палитре Range, что бы копировать весь стиль оформления установленный пользователем на листе палитры</remarks>
        /// <param name="ws">Лист в котором будет произведена закраска</param>
        /// <param name="pallet">Палитра</param>
        public static void Repaint(Excel.Worksheet ws, Dictionary <string, Excel.Range> pallets, IProgressBarWithLogUI pb)
        {
            Excel.Application application = ws.Application;

            pb.SetSubBarVolume(ws.UsedRange.Rows.Count);
            foreach (Excel.Range row in ws.UsedRange.Rows)
            {
                if (pb.IsAborted)
                {
                    break;
                }
                pb.SubBarTick();

                if (pallets.TryGetValue(row.Cells[1, 1].Text, out Excel.Range pallet))
                {
                    pallet.Copy();
                    row.PasteSpecial(Excel.XlPasteType.xlPasteFormats, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);
                }
            }
            application.CutCopyMode = (Excel.XlCutCopyMode) 0;
        }