private void SortData(SPTypes SPType) { try { // Sort table table = table.AsEnumerable().OrderBy(c => c[1]).CopyToDataTable(); // Search for main components DataTable mainTable = null; DataTable commonTable = null; if ((SPType == SPTypes.СП) || (SPType == SPTypes.Корпус)) { // Copy table commonTable = table.Copy(); mainTable = table.Copy(); // Eliminate tail of factorynumbers int defisIndex = mainComponent.FactoryNumber.ToString().IndexOf("-"); string factoryNumberClean; if (defisIndex > 0) { factoryNumberClean = mainComponent.FactoryNumber.ToString().Substring(0, defisIndex); } else { factoryNumberClean = mainComponent.FactoryNumber.ToString(); } for (int i = table.Rows.Count - 1; i >= 0; i--) { string partNumber = table.Rows[i]["PartNumber"].ToString(); if (partNumber.IndexOf(factoryNumberClean) > 0) { commonTable.Rows.RemoveAt(i); } else { mainTable.Rows.RemoveAt(i); } } table.Clear(); // merge tables mainTable.Merge(commonTable); table = mainTable.Copy(); // Clear tables mainTable = null; commonTable = null; } } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, MessageBoxButton.OK); } }
// Create Method public void Create(SPTypes SPType) { try { // Declare specification component Component specComponent = null; // Check whether the component exist if (!IsComponentExist(SPType, out specComponent)) { System.Windows.MessageBox.Show("Компонент для данного типа спецификации отсутствует в модели.", "Компонент отсутствует в модели", MessageBoxButton.OK); return; } // Open Workbook Excel.Application excelApp; Excel.Workbook workBook = ExcelClass.OpenExcelWorkBook(FilePath, out excelApp, true); // Get appropriate work sheet Excel.Worksheet workSheet = GetWorkSheet(workBook, SPType); // Get specification header string specHeader = GetSpecificationHeader(SPType); // Format worksheet columns FormatWorkSheet(workSheet, specHeader); // Load Data table = GetDataTable(specComponent); // Refine and Merge table rows RefineAndMerge(); // Sort table SortData(SPType); // Write data to Excel sheet WriteData(workSheet); // Match VP and SP data MatchData(workSheet, excelApp); // Close Excel ExcelClass.CloseExcel(workBook, excelApp); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, MessageBoxButton.OK); } }
private string GetSpecificationHeader(SPTypes SPType) { string header = string.Empty; try { header += mainComponent.Description + " "; header += mainComponent.PartNumber; header += "\n"; switch (SPType) { case SPTypes.СП: header += "Спецификация "; break; case SPTypes.ТМ: header += "Спецификация Трубы медные "; break; case SPTypes.ТС: header += "Спецификация Трубы стальные "; break; case SPTypes.ТП: header += "Спецификация Трубы пластиковые "; break; case SPTypes.Корпус: header += "Спецификация Корпус "; break; default: break; } // Check whether Quantity is numeric int quantity; bool result = Int32.TryParse(this.Quantity, out quantity); // Define factory numbers if (result) { if (this.Quantity != "1") { // get double factoryNumber; result = Double.TryParse(mainComponent.FactoryNumber, out factoryNumber); if (result) { string lastFactoryNumber = (factoryNumber + quantity).ToString(); lastFactoryNumber = lastFactoryNumber.Substring(lastFactoryNumber.Length - 4); header += "Заводские номера № " + mainComponent.FactoryNumber + "–" + lastFactoryNumber; } else { header += "Заводской номер № " + mainComponent.FactoryNumber; } } else { header += "Заводской номер № " + mainComponent.FactoryNumber; } } else { header += "Заводской номер № " + mainComponent.FactoryNumber; } } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, MessageBoxButton.OK); } return(header); }
private Excel.Worksheet GetWorkSheet(Excel.Workbook workBook, SPTypes SPType) { Excel.Worksheet workSheet = null; try { string workSheetName = string.Empty; switch (SPType) { case SPTypes.СП: workSheetName = "Спецификация"; break; case SPTypes.ТМ: workSheetName = "Спецификация-медь"; break; case SPTypes.ТС: workSheetName = "Спецификация-сталь"; break; case SPTypes.ТП: workSheetName = "Спецификация-пластик"; break; case SPTypes.Корпус: workSheetName = "Спецификация-корпус"; break; default: break; } if (workSheetName != string.Empty) { foreach (Excel.Worksheet workSheet2 in workBook.Sheets) { if (workSheet2.Name == workSheetName) { workSheet = workSheet2; } } // Check whether the sheet exist if (workSheet == null) { // Create new sheet workSheet = workBook.ActiveSheet; if (workSheet.Name != "Лист1") { // Add new sheet workSheet = workBook.Sheets.Add(); } // Rename sheet workSheet.Name = workSheetName; } } else { return(null); } } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, MessageBoxButton.OK); } return(workSheet); }
private bool IsComponentExist(SPTypes SPType, out Component component) { component = null; try { bool ok = false; switch (SPType) { case SPTypes.СП: component = mainComponent; ok = true; break; case SPTypes.ТМ: foreach (Component subComponent in mainComponent.Components) { if (subComponent.AssemblyType == AssemblyTypes.ТМ) { component = subComponent; ok = true; } } break; case SPTypes.ТС: foreach (Component subComponent in mainComponent.Components) { if (subComponent.AssemblyType == AssemblyTypes.ТС) { component = subComponent; ok = true; } } break; case SPTypes.ТП: foreach (Component subComponent in mainComponent.Components) { if (subComponent.AssemblyType == AssemblyTypes.ТП) { component = subComponent; ok = true; } } break; case SPTypes.Корпус: foreach (Component subComponent in mainComponent.Components) { if (subComponent.AssemblyType == AssemblyTypes.Casing) { component = subComponent; ok = true; } } break; default: break; } return(ok); } catch (Exception ex) { MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, MessageBoxButton.OK); return(false); } }