/// <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); } }
/// <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); }