/// Добавить список /// Добавить столбцы КП /// Проставить формулы public void LoadUrv12() { pb.SetMainBarVolum(7); pb.MainBarTick("Очистка"); ClearDataRng12(); string letterName = _project.Columns.Find(x => x.Name == Project.ColumnsNames[StaticColumns.Name]).ColumnSymbol; string letterNumber = _project.Columns.Find(x => x.Name == Project.ColumnsNames[StaticColumns.Number]).ColumnSymbol; string letterLevel = _project.Columns.Find(x => x.Name == Project.ColumnsNames[StaticColumns.Level]).ColumnSymbol; string letterCost = _project.Columns.Find(x => x.Name == Project.ColumnsNames[StaticColumns.CostTotal]).ColumnSymbol; int lastRow = _AnalisysSheet.UsedRange.Row + _AnalisysSheet.UsedRange.Rows.Count - 1; pb.MainBarTick("Определение столбцов КП"); List <OfferColumns> addresses = new ProjectWorkbook().OfferColumns; pb.Writeline("Копирование заголовков"); PrintTitlesOffers12(addresses); int rowPaste = 14; int colPaste = 6; int lastCol = colPaste + 5 * addresses.Count - 1; int count = lastRow - _project.RowStart + 1; if (count < 1) { throw new AddInException($"Строки отсутствуют лист: {_project.AnalysisSheetName}"); } pb.SetSubBarVolume(count); pb.MainBarTick("Заполнение строк"); ProjectWorkbook projectWorkbook = new ProjectWorkbook(); Excel.Range dataRange = projectWorkbook.GetAnalysisRange(); for (int row = _project.RowStart; row <= lastRow; row++) { if (pb.IsAborted) { throw new AddInException("Процесс остановлен"); } pb.SubBarTick(); Excel.Range cellNumber = _AnalisysSheet.Range[$"${letterNumber}{row}"]; int columnCellNumber = cellNumber.Column; string number = cellNumber.Value?.ToString() ?? ""; if (string.IsNullOrEmpty(number)) { continue; } string name = _AnalisysSheet.Range[$"${letterName}{row}"].Value?.ToString() ?? ""; string level = _AnalisysSheet.Range[$"${letterLevel}{row}"].Value?.ToString() ?? ""; string cost = _AnalisysSheet.Range[$"${letterCost}{row}"].Value?.ToString() ?? ""; int levelNum = int.TryParse(level, out int ln) ? ln : 0; if (levelNum > 0 && levelNum < 6) { SheetUrv12.Rows[rowPaste].Insert(Excel.XlInsertShiftDirection.xlShiftDown); Excel.Range numberCell = SheetUrv12.Cells[rowPaste, 2]; SheetUrv12.Cells[rowPaste, 1].Value = level; // Уровень numberCell.NumberFormat = "@"; numberCell.Value = number; SheetUrv12.Cells[rowPaste, 3].Value = name; string letterOutName = ExcelHelper.GetColumnLetter(numberCell); int colTotalCost = ExcelHelper.GetColumn(letterCost, _AnalisysSheet); int column = colTotalCost - columnCellNumber + 1; SheetUrv12.Cells[rowPaste, 4].Formula = $"= VLOOKUP(${letterOutName}{rowPaste}, '{_project.AnalysisSheetName}'! {dataRange.Address}, {column}, FALSE)"; // Формат строки по уровню Dictionary <string, Excel.Range> pallets = ExcelReader.ReadPallet(_SheetPalette); if (pallets.TryGetValue(level, out Excel.Range pallet)) { ExcelHelper.SetCellFormat(SheetUrv12.Range[SheetUrv12.Cells[rowPaste, 2], SheetUrv12.Cells[rowPaste, lastCol]], pallet); } // Вывод и форматирование значений foreach (OfferColumns address in addresses) { int col = address.ColCostTotalOffer - columnCellNumber + 1; //РУБ. РФ SheetUrv12.Cells[rowPaste, colPaste].Formula = $"= VLOOKUP(${letterOutName}{rowPaste}, '{_project.AnalysisSheetName}'! {dataRange.Address}, {col}, FALSE)"; //% отклонения материалы col = address.ColDeviationMaterials - columnCellNumber + 1; SheetUrv12.Cells[rowPaste, colPaste + 1].Formula = $"= VLOOKUP(${letterOutName}{rowPaste}, '{_project.AnalysisSheetName}'! {dataRange.Address}, {col}, FALSE)"; //% отклонения работы col = address.ColDeviationWorks - columnCellNumber + 1; SheetUrv12.Cells[rowPaste, colPaste + 2].Formula = $"= VLOOKUP(${letterOutName}{rowPaste}, '{_project.AnalysisSheetName}'! {dataRange.Address}, {col}, FALSE)"; // % отклонения всего string letterOutTotalDiff = ExcelHelper.GetColumnLetter(SheetUrv12.Cells[rowPaste, colPaste]); SheetUrv12.Cells[rowPaste, colPaste + 3].Formula = $"=IF(D{rowPaste}>0, ${letterOutTotalDiff}{rowPaste}/$D{rowPaste}-1, \"\")"; //КОММЕНТАРИИ К СТОИМОСТИ col = address.ColComments - columnCellNumber + 1; SheetUrv12.Cells[rowPaste, colPaste + 4].Formula = $"= VLOOKUP(${letterOutName}{rowPaste}, '{_project.AnalysisSheetName}'! {dataRange.Address}, {col}, FALSE)"; colPaste += 5; } colPaste = 6; rowPaste++; } } SetConditionFormat12(); pb.MainBarTick("Формулы итогов"); TotalFormuls12(); pb.MainBarTick("Формат ячеек"); SetNumberFormat12(addresses.Count); pb.MainBarTick("Общие комментарии"); new CommonComments(projectWorkbook).SetInfo(); pb.MainBarTick($"Удаление строки №{_rowStart}"); Excel.Range rng = SheetUrv12.Cells[_rowStart, 1]; rng.EntireRow.Delete(); }
/// <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("Формулы \"Комментарии Спектрум к заявке участника\""); }