예제 #1
0
        public void ParseXmlTest()
        {
            var persons = ParserPerson.Instance().Parse("c:/temp/dataMar-28-2018.xml");

            foreach (var pers in persons)
            {
                Assert.IsNotNull(pers.Name);
            }
            Assert.AreEqual(100, persons.Count);
            Debug.WriteLine(persons.Count);
        }
예제 #2
0
        private void buttonParserPerson_Click(object sender, EventArgs e)
        {
            if (DateTime.Now > new DateTime(2017, 06, 01))
            {
                return;
            }

            try
            {
                if (this.folderBrowserDialog1.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                string[] files = Directory.GetFiles(this.folderBrowserDialog1.SelectedPath);

                Log("Начало обработки");
                this.UseWaitCursor = true;

                foreach (var file in files)
                {
                    try
                    {
                        Log("Выбран файл: " + Path.GetFileName(file));

                        if (Path.GetExtension(file) != ".xlsx")
                        {
                            Log("Формат файла не поддерживается: " + Path.GetExtension(file));
                            continue;
                        }


                        Log("Начало обработки");
                        this.UseWaitCursor = true;

                        Log("Выбран файл: " + Path.GetFileName(file));

                        FileInfo newFile = new FileInfo(file);

                        ExcelPackage _pck = new ExcelPackage(newFile);
                        #region foreach
                        foreach (var worksheet in _pck.Workbook.Worksheets)
                        {
                            int ColumnName      = -1;
                            int ColumnSex       = -1;
                            int ColumnEmail     = -1;
                            int ColumnTelephone = -1;
                            int ColumnBrithday  = -1;

                            Log("Обрабатываем страницу: " + worksheet.Name);
                            if (worksheet.Dimension == null)
                            {
                                Log("Страница пуста - пропускаем");
                                continue;
                            }
                            #region for_rowCnt
                            var rowCnt = worksheet.Dimension.End.Row;
                            var colCnt = worksheet.Dimension.End.Column;
                            for (int i = 1; i <= colCnt; i++)
                            {
                                if (worksheet.Cells[1, i] == null)
                                {
                                    continue;
                                }
                                if (worksheet.Cells[1, i].Value == null)
                                {
                                    continue;
                                }
                                switch (worksheet.Cells[1, i].Value.ToString().Trim())
                                {
                                case "Имя":
                                    ColumnName = i;
                                    break;

                                case "Пол":
                                    ColumnSex = i;
                                    break;

                                case "Email":
                                    ColumnEmail = i;
                                    break;

                                case "Телефон":
                                    ColumnTelephone = i;
                                    break;

                                case "Дата рождения":
                                    ColumnBrithday = i;
                                    break;
                                }
                            }
                            #endregion
                            string Notify = "";
                            if (ColumnName < 0)
                            {
                                Notify += "\nИмя";
                            }
                            if (ColumnSex < 0)
                            {
                                Notify += "\nПол";
                            }
                            if (ColumnEmail < 0)
                            {
                                Notify += "\nEmail";
                            }
                            if (ColumnTelephone < 0)
                            {
                                Notify += "\nТелефон";
                            }
                            if (ColumnBrithday < 0)
                            {
                                Notify += "\nДата рождения";
                            }

                            if (Notify.Length > 0)
                            {
                                Notify = "Отсутствуют поля: " + Notify;
                                Log(Notify);
                                break;
                            }

                            string DirName = "ParserPerson";
                            if (!Directory.Exists(DirName))
                            {
                                Directory.CreateDirectory(DirName);
                            }

                            string FileName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");
                            FileName = Directory.GetCurrentDirectory() + @"\" + DirName + @"\" + FileName + ".xlsx";
                            var existingFile = new FileInfo(FileName);
                            #region using
                            using (var package = new ExcelPackage(existingFile))
                            {
                                var workbook = package.Workbook;

                                var worksheet1 = workbook.Worksheets.Add(worksheet.Name);

                                List <ParserPerson> theList = new List <ParserPerson>();
                                #region for
                                for (int i = 1; i <= rowCnt; i++)
                                {
                                    ParserPerson data = new ParserPerson();
                                    data.Telephone = GetValueFromCell(worksheet.Cells[i, ColumnTelephone]);
                                    data.Name      = GetValueFromCell(worksheet.Cells[i, ColumnName]);
                                    data.Email     = GetValueFromCell(worksheet.Cells[i, ColumnEmail]);
                                    data.Sex       = GetValueFromCell(worksheet.Cells[i, ColumnSex]);
                                    data.Brithday  = GetValueFromCell(worksheet.Cells[i, ColumnBrithday]);

                                    data.Telephone = IndexMobileCore.Helper.Telephone.Normalize(data.Telephone);

                                    if (data.Telephone.Length < 10)
                                    {
                                        continue;
                                    }


                                    string _Code   = data.Telephone.Substring(0, 3);
                                    string _Number = data.Telephone.Substring(3, 7);
                                    Log("_Code - " + _Code);
                                    Log("_Number - " + _Number);

                                    int Code   = 0;
                                    int Number = 0;

                                    try
                                    {
                                        Code   = Convert.ToInt32(_Code);
                                        Number = Convert.ToInt32(_Number);
                                    }
                                    catch
                                    {
                                        Log("Ошибка при определении Code и Number");
                                        continue;
                                    }
                                    Log("Вызываем: IndexMobileCore.Helper.Telephone.Operator(" + Code.ToString() + ", " + Number.ToString() + ")");

                                    var theDEF = DEF.GetOperator(Code, Number);
                                    if (theDEF != null)
                                    {
                                        Log("Получено значение: tel_operator =  " + theDEF.Operator + " - " + theDEF.Region);
                                        data.Operator = theDEF.Operator;
                                        data.Region   = theDEF.Region;
                                    }
                                    else
                                    {
                                        Log("Значение отсутствует");
                                    }


                                    if (theList.Count(x => x.Email == data.Email) > 0)
                                    {
                                        continue;
                                    }

                                    theList.Add(data);
                                }
                                #endregion
                                for (int i = 1; i <= theList.Count; i++)
                                {
                                    var data = theList[i - 1];
                                    worksheet1.Cells[i, 1].Value = data.Telephone;
                                    worksheet1.Cells[i, 2].Value = data.Operator;
                                    worksheet1.Cells[i, 3].Value = data.Region;
                                    worksheet1.Cells[i, 4].Value = data.Name;
                                    worksheet1.Cells[i, 5].Value = data.Email;
                                    worksheet1.Cells[i, 6].Value = data.Sex;
                                    worksheet1.Cells[i, 7].Value = data.Brithday;
                                }
                                package.Save();
                                Log("Сохранено: " + FileName);
                            }
                            #endregion
                            break;
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        Log("Ошибка при обработке файла: " + file + " " + ex.Message);
                    }
                }
                Log("Завершено!");
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                err += ex.StackTrace;
                Log(err);
            }
            finally
            {
                this.UseWaitCursor = false;
            }
        }