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; }
public void GetCoeffsFromAnotherList(MetersList anotherList) { if (!IsValidListToReplace()) { return; } // Назначаем коэфициенты по ФАПам for (int i = 1; i < Count; i++) { this[i].GeneralCoefficient = Math.Round(anotherList[i].GeneralCoefficient / anotherList[0].GeneralCoefficient, EnergyMeter.COEFF_PRECISION); } // Корректируем коэффициенты по ФАПам double rest = Math.Round(this.Sum(t => t.GeneralCoefficient), EnergyMeter.COEFF_PRECISION); if (rest.NE(100.0)) { if (rest.LT(0.0)) { this.Where(t => (t.GeneralCoefficient == this.Max(k => k.GeneralCoefficient))).First().GeneralCoefficient += rest; } else { this.Where(t => (t.GeneralCoefficient == this.Min(k => k.GeneralCoefficient))).First().GeneralCoefficient += rest; } } // Устанавливаем и корректируем коэффициенты месяцев for (int i = 1; i < anotherList.Count; i++) { for (int j = 0; j < anotherList[i].MonthsLimits.Count(); j++) { this[i].MonthsCoefficients[j] = Math.Round(anotherList[i].MonthsLimits[j] / anotherList[i].TotalLimit, EnergyMeter.COEFF_PRECISION); } rest = Math.Round(this[i].MonthsCoefficients.Sum(), EnergyMeter.COEFF_PRECISION); if (rest.NE(100.0)) { if (rest.LT(0.0)) { int maxElemIndex = 0; double maxElem = this[i].MonthsCoefficients.Max(); for (int k = 0; k < this[i].MonthsCoefficients.Count(); k++) { if (this[i].MonthsCoefficients[k].EQ(maxElem)) { maxElemIndex = k; break; } } this[i].MonthsCoefficients[maxElemIndex] += rest; } else { int minElemIndex = 0; double minElem = this[i].MonthsCoefficients.Max(); for (int k = 0; k < this[i].MonthsCoefficients.Count(); k++) { if (this[i].MonthsCoefficients[k].EQ(minElem)) { minElemIndex = k; break; } } this[i].MonthsCoefficients[minElemIndex] += rest; } } } }
public Form1() { InitializeComponent(); dataGridView1.AutoGenerateColumns = false; Visible = false; #region Проверка состояния файлов программы и загрузка данных из Excel LoadingProgramForm lf = new LoadingProgramForm(this); lf.Show(); lf.ChangeLoadProgress("Перевірка файлової структури системи...", 0); // Проверяем наличие директории с шаблонами if (!System.IO.Directory.Exists(System.IO.Path.Combine(getApplicationDirectory(), TEMPLATES_DIRECTORY_NAME))) { lf.ChangeLoadProgress("Створюємо директорію із шаблонами 'templates'...", 0); System.IO.Directory.CreateDirectory(System.IO.Path.Combine(getApplicationDirectory(), TEMPLATES_DIRECTORY_NAME)); lf.ChangeLoadProgress("Директорія 'templates' створена!", 4); } else { lf.ChangeLoadProgress("Директорія 'templates' наявна...", 4); } // Проверяем наличие директории с конфигурациями if (!System.IO.Directory.Exists(System.IO.Path.Combine(getApplicationDirectory(), CFG_DIRECTORY_NAME))) { lf.ChangeLoadProgress( string.Format("Відсутня директорія із конфігураціями '{0}'. Створюємо її...", CFG_DIRECTORY_NAME), 0); System.IO.Directory.CreateDirectory(System.IO.Path.Combine(getApplicationDirectory(), CFG_DIRECTORY_NAME)); lf.ChangeLoadProgress( string.Format("Директорія із конфігураціями '{0}' успішно створена!", CFG_DIRECTORY_NAME), 4); } else { lf.ChangeLoadProgress(string.Format("Директорія із конфігураціями '{0}' наявна...", CFG_DIRECTORY_NAME), 4); LoadCfgList(); } if (!System.IO.File.Exists(System.IO.Path.Combine(getApplicationDirectory(), TEMPLATES_DIRECTORY_NAME, TEMPLATES_FILE_NAME))) { lf.ChangeLoadProgress("Створюємо файл-шаблон...", 0); using (System.IO.FileStream fs = new System.IO.FileStream(System.IO.Path.Combine(getApplicationDirectory(), TEMPLATES_DIRECTORY_NAME, TEMPLATES_FILE_NAME), System.IO.FileMode.Create, System.IO.FileAccess.Write)) { fs.Write(Properties.Resources.limits, 0, Properties.Resources.limits.Length); fs.Flush(); } } lf.ChangeLoadProgress( string.Format("Файл шаблону '{0}\\{1}' наявний...", TEMPLATES_DIRECTORY_NAME, TEMPLATES_FILE_NAME), 4); lf.ChangeLoadProgress("Завантажуємо шаблон...", 0); metersList = GetDataFromExelFile(System.IO.Path.Combine(getApplicationDirectory(), TEMPLATES_DIRECTORY_NAME, TEMPLATES_FILE_NAME), true); lf.ChangeLoadProgress("Данні завантажені!", 50); #endregion lf.ChangeLoadProgress("Налаштовуємо інтерфейс...", 0); metersList.IsInitialized = true; metersList.SetDefaultCoeffs(); dataGridView1.DataSource = metersList; ShowCoeffs(metersList.First()); lf.ChangeLoadProgress("Усе готово до роботи!", 0); lf.CompleteProcess(); lf.Close(); Visible = true; programIsReady = true; }
private MetersList GetDataFromExelFile(string fileName, bool appStart) { MetersList mList = new MetersList(); // запуск процесса Excel Excel.Application xlApp = new Excel.Application(); if (xlApp == null) { NotificationHelper.ShowError("Помилка при завантаженні екземпляру Microsoft Excel!"); Environment.Exit(0); } // Загрузка книги Excel.Workbook wb = xlApp.Workbooks.Open(fileName); if (wb == null) { NotificationHelper.ShowError("Помилка при завантаженні книги Microsoft Excel!"); xlApp.Quit(); xlApp = null; Environment.Exit(0); } // Выбор листа с данными Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1]; if (ws == null) { NotificationHelper.ShowError("Помилка при завантаженні листа із книги Microsoft Excel!"); xlApp.Quit(); xlApp = null; Environment.Exit(0); } // Считывание данных с листа try { for (int i = 0; ; i++) { string name = ws.get_Range(NAME_COLUMN_LETTER + (NAME_COLUMN_INDEX + i)).Value; if (string.IsNullOrWhiteSpace(name)) { break; } if (appStart) { mList.Add( new EnergyMeter { Name = name, IsHeating = (name.EndsWith("(опал.)") || name.EndsWith("(оп.)") || name.EndsWith("(опалення)")), Number = (i + 1), ConnectedPower = ws.get_Range(POWER_COLUMN_LETTER + (NAME_COLUMN_INDEX + i)).Value }); } else { double[] mounthLimits = new double[12]; for (int j = 0; j < MONTHS_LETTERS.Count(); j++) { mounthLimits[j] = ws.get_Range(MONTHS_LETTERS[j] + (NAME_COLUMN_INDEX + i)).Value; } EnergyMeter newMeter = new EnergyMeter(ws.get_Range(YEAR_LETTER + (NAME_COLUMN_INDEX + i)).Value, mounthLimits); newMeter.Name = name; newMeter.Number = (i + 1); newMeter.ConnectedPower = ws.get_Range(POWER_COLUMN_LETTER + (NAME_COLUMN_INDEX + i)).Value; mList.Add(newMeter); } } } catch (Exception ex) { NotificationHelper.ShowError("Помилка при завантаженні данних!"); Environment.Exit(0); } finally { wb.Close(false); xlApp.Quit(); xlApp = null; //System.GC.Collect(); } return(mList); }