Ejemplo n.º 1
0
        /// <summary>
        /// Создаем файл с путешественниками
        /// </summary>
        /// <param name="codeMO"></param>
        /// <param name="listTraveller"></param>
        public static async Task CreateFileWithTravellerAsync(string codeMO, List <Traveller> listTraveller)
        {
            string nameMO = await GetNameMOAsync(codeMO);

            PropertyInfo[] properties = new Traveller().ReturnType();
            //выкидываем невалидные для имени файла символы
            nameMO = string.Join("_", nameMO.Split(Path.GetInvalidFileNameChars()));
            string path = $@"C:\Working\{nameMO}.xlsx";

            using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                IWorkbook       wb       = new XSSFWorkbook();
                ISheet          sheet    = wb.CreateSheet("Sheet1");
                ICreationHelper cH       = wb.GetCreationHelper();
                IRow            hederRow = sheet.CreateRow(0);
                //заполняем первую строку с названиями полей
                for (int i = 0; i < properties.Length; i++)
                {
                    ICell cell = hederRow.CreateCell(i);
                    cell.CellStyle.FillBackgroundColor = 1;
                    cell.SetCellValue(properties[i].Name);
                }
                //заполняем строки с данными о прибывших
                for (int i = 0; i < listTraveller.Count; i++)
                {
                    IRow row = sheet.CreateRow(i);
                    for (int j = 0; j < properties.Length; j++)
                    {
                        ICell cell = row.CreateCell(j);
                        cell.SetCellValue(listTraveller[i].GetType().GetProperty(properties[j].Name).GetValue(listTraveller[i], null).ToString());
                    }
                }
                wb.Write(stream);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///  Читаем файл и заполняем listTraveller данными из каждой строки
        /// </summary>
        /// <returns>
        /// </returns>
        public static async Task <List <Traveller> > GetListTravellersFromFileXLSAsync()
        {
            List <Traveller> listTraveller = new List <Traveller>();

            Console.WriteLine("Путь к файлу: ");
            string filenameRead = Console.ReadLine().Replace("\"", "");

            using (FileStream fs = new FileStream(filenameRead, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                NPOI.SS.UserModel.IWorkbook wb = null;
                NPOI.SS.UserModel.ISheet    sh = null;
                try
                {
                    wb = new XSSFWorkbook(fs);
                    sh = (XSSFSheet)wb.GetSheetAt(0);
                }
                catch
                {
                    Console.WriteLine("Can't open file as a Workbook");
                    return(null);
                }
                //первая строка с данными в текущем файле МВД 23
                for (int row = 24; row <= sh.LastRowNum; row++)
                {
                    //Получаем фамилию из файла
                    string family = sh.GetRow(row).GetCell(1).StringCellValue;
                    //Получаем имя с отчеством из файла
                    string[] nameAndPatronymic = sh.GetRow(row).GetCell(2).StringCellValue.Split(' ');
                    //Получаем имя из массива nameAndPatronymic
                    string name = nameAndPatronymic[0];
                    //Получаем отчество из массива nameAndPatronymic                                    //на случай если кто то без отчества
                    string patronymic = nameAndPatronymic.Length < 3 ? nameAndPatronymic[1] : nameAndPatronymic[1] + " " + nameAndPatronymic[2];
                    //Получаем дату рождения из файла
                    string birthDate = sh.GetRow(row).GetCell(3).NumericCellValue.ToString();
                    //в файле источнике  дата представлена строкой 7 или 8 символов, вставляем точки в зависимости от одной или второй ситуации
                    string resBirth = birthDate.Length > 7 ? birthDate.Insert(2, ".").Insert(5, ".") : birthDate.Insert(1, ".").Insert(4, ".");
                    //Получаем Код Мед организации
                    string codeMO = await GetCodeMOFromFOMSAsync(family, name, patronymic, resBirth);

                    Traveller traveller = new Traveller()
                    {
                        //название полей идут в файл, названиями столбцов. поэтому на кириллице
                        //присаиваем фамилию
                        Фамилия = family,
                        //присваиваем имя
                        Имя = name,
                        //присваиваем отчество
                        Отчество = patronymic,
                        //присваиваем ДР
                        ДатаРождения = birthDate,
                        //Присваиваем НР(стоблец 8)
                        НР = sh.GetRow(row).GetCell(8).CellType == NPOI.SS.UserModel.CellType.Numeric ? sh.GetRow(row).GetCell(8).NumericCellValue.ToString() : sh.GetRow(row).GetCell(8).StringCellValue,
                        //приваиваем код медорганизации
                        КодМедОрганизации = String.IsNullOrEmpty(codeMO) ? "0" : codeMO
                    };
                    //добавляем заполненный объект в список
                    listTraveller.Add(traveller);
                    Console.WriteLine(traveller.Фамилия + " " + traveller.КодМедОрганизации);
                }
            }
            return(listTraveller);
        }