private void onConfigurationSelect(object sender, EventArgs e) { if (openFileMenuItem.DropDownItems.Count == 0) { return; } // Убираем флажки с других конфигураций foreach (var cfg in openFileMenuItem.DropDownItems) { ((ToolStripMenuItem)cfg).Checked = false; } string cfgFilePath = System.IO.Path.Combine(getApplicationDirectory(), CFG_DIRECTORY_NAME, ((ToolStripMenuItem)sender).Text); try { metersList.ReadFromXml(cfgFilePath); NotificationHelper.ShowInfo("Конфігурація успішно завантажена!"); // Отмечаем в меню выбранную конфигурацию ToolStripMenuItem item = (ToolStripMenuItem)sender; item.Checked = true; } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); } }
private void saveFileMenuItem_Click(object sender, EventArgs e) { SaveFileDialog sd = new SaveFileDialog(); sd.Filter = "XML файл (*.xml)|*.xml"; sd.InitialDirectory = System.IO.Path.Combine(getApplicationDirectory(), CFG_DIRECTORY_NAME); sd.ShowDialog(); try { if (!string.IsNullOrWhiteSpace(sd.FileName)) { metersList.WriteToXml(sd.FileName); NotificationHelper.ShowInfo("Зміни успішно збережені!"); } } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); } }
private void importDataMenuItem_Click(object sender, EventArgs e) { OpenFileDialog importDataDialog = new OpenFileDialog(); importDataDialog.Filter = "Файл Excel (*.xlsx)|*.xlsx"; importDataDialog.ShowDialog(); string fileName = importDataDialog.FileName; if (string.IsNullOrWhiteSpace(fileName)) { return; } this.Enabled = false; metersList = GetDataFromExelFile(fileName, false); metersList.IsInitialized = true; dataGridView1.DataSource = metersList; ShowCoeffs(metersList.First()); NotificationHelper.ShowInfo("Данні успішно завантажені"); this.Enabled = true; }
private void WriteLimitsToExcelFile() { try { metersList.SetSum(CalculateVolume()); } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); return; } HeavyProcessProgressForm hpForm = new HeavyProcessProgressForm(this); hpForm.Show(); Enabled = false; Excel.Application xlApp = new Excel.Application(); if (xlApp == null) { NotificationHelper.ShowError("Помилка при завантаженні Excel."); Environment.Exit(0); } hpForm.ChangeProgress(null, 2); Excel.Workbook wb = xlApp.Workbooks.Open(System.IO.Path.Combine(getApplicationDirectory(), TEMPLATES_DIRECTORY_NAME, TEMPLATES_FILE_NAME)); if (wb == null) { xlApp.Quit(); xlApp = null; NotificationHelper.ShowError("Помилка при завантаженні файлу шаблону."); Environment.Exit(0); } hpForm.ChangeProgress(null, 2); Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1]; if (ws == null) { wb.Close(0); xlApp.Quit(); xlApp = null; NotificationHelper.ShowError("Помилка при завантаженні файлу шаблону."); Environment.Exit(0); } hpForm.ChangeProgress(null, 2); int progrStep = (int)Math.Floor((double)(hpForm.ProgressRest / (metersList.Count() - 1))); try { // Массив итогов по месяцам double[] monthTotals = new double[12]; // Массив итогов по кварталам double[] quartalsLimits = new double[QUARTER_LETTERS.Length]; // Общая мощность double totalPower = 0.0; // Итог по году double yearTotal = 0.0; for (int i = 1; i < metersList.Count; i++) { hpForm.ChangeProgress(string.Format("Заповнюємо ліміти по '{0}'...", metersList[i].Name), progrStep); ws.get_Range(POWER_COLUMN_LETTER + (NAME_COLUMN_INDEX + (i - 1))).Value = metersList[i].ConnectedPower; totalPower += metersList[i].ConnectedPower; ws.get_Range(POWER_COLUMN_LETTER + YEAR_BEGIN_INDEX).Value = Math.Round(totalPower, EnergyMeter.LIMIT_PRECISION); // Заполняем лимиты по месяцам for (int j = 0; j < metersList[i].MonthsLimits.Length; j++) { ws.get_Range(MONTHS_LETTERS[j] + (NAME_COLUMN_INDEX + (i - 1))).Value = metersList[i].MonthsLimits[j]; monthTotals[j] += metersList[i].MonthsLimits[j]; ws.get_Range(MONTHS_LETTERS[j] + YEAR_BEGIN_INDEX).Value = Math.Round(monthTotals[j], EnergyMeter.LIMIT_PRECISION); } // Вычисляем и заполняем значения за кварталы for (int j = 0; j < QUARTER_LETTERS.Length; j++) { double quartalValue = Math.Round((metersList[i].MonthsLimits[0 + (3 * j)] + metersList[i].MonthsLimits[1 + (3 * j)] + metersList[i].MonthsLimits[2 + (3 * j)]) , EnergyMeter.LIMIT_PRECISION); ws.get_Range(QUARTER_LETTERS[j] + (NAME_COLUMN_INDEX + (i - 1))).Value = quartalValue; quartalsLimits[j] += quartalValue; // Если на шаблон на формулах, то комментим ws.get_Range(QUARTER_LETTERS[j] + YEAR_BEGIN_INDEX).Value = Math.Round(quartalsLimits[j], EnergyMeter.LIMIT_PRECISION); } // ВСЁ ЧТО НИЖЕ МОЖНО ПРОСТО ПРОПИСАТЬ ФОРМУЛАМИ В ШАБЛОНЕ!! double yearMeterTotal = Math.Round(metersList[i].MonthsLimits.Sum(), EnergyMeter.LIMIT_PRECISION); ws.get_Range(YEAR_LETTER + (NAME_COLUMN_INDEX + (i - 1))).Value = yearMeterTotal; yearTotal += yearMeterTotal; ws.get_Range(YEAR_LETTER + YEAR_BEGIN_INDEX).Value = Math.Round(yearTotal, EnergyMeter.LIMIT_PRECISION); } hpForm.ChangeProgress("Зберігаємо зміни до файлу...", hpForm.ProgressRest); string fileNameToSave = System.IO.Path.Combine(getApplicationDirectory(), READY_FILE_NAME); string fName = System.IO.Path.GetFileNameWithoutExtension(fileNameToSave); int k = 0; while (System.IO.File.Exists(fileNameToSave)) { string fExtension = new System.IO.FileInfo(fileNameToSave).Extension; string newFName = fName + "-" + (k++) + fExtension; fileNameToSave = System.IO.Path.Combine(getApplicationDirectory(), newFName); } wb.SaveAs(fileNameToSave); NotificationHelper.ShowInfo("Все готово!"); } catch { NotificationHelper.ShowError("Помилка при заповненні файлу! Скоріше за все файл зайнятий іншою программою"); return; } finally { hpForm.Close(); Enabled = true; // Закрываем всё! wb.Close(0); xlApp.Quit(); xlApp = null; } }