示例#1
0
        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;
        }
示例#2
0
        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;
                    }
                }
            }
        }
示例#3
0
        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;
        }
示例#4
0
        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);
        }