/// <summary> /// Обработка Excel документов /// </summary> /// <param name="nameColName"></param> /// <param name="titleColName"></param> /// <param name="docColName"></param> /// <param name="yearColName"></param> public static void SelectXlsFiles(string nameColName, string titleColName, string docColName, string yearColName, ProgressBar bar, int type, Label status, Label nFiles) { _nameColName = nameColName; _titleColName = titleColName; _docColName = docColName; _yearColName = yearColName; string mess = ""; OpenFileDialog xlsBooks = new OpenFileDialog(); xlsBooks.Title = "Выберите файлы Excel с позициями"; xlsBooks.Multiselect = true; xlsBooks.DefaultExt = "xlsx"; xlsBooks.Filter = "Файлы Excel (*.xls;*.xlsx)|*.xls;*.xlsx|All files (*.*)|*.*"; if (xlsBooks.ShowDialog() != DialogResult.OK) return; _userLog = new StreamWriter(_USER_LOG_FULL_PATH, false, Encoding.UTF8); _userLog.WriteLine(DateTime.Now.ToLongTimeString()); _userLog.WriteLine("Начало работы"); _logger = new Logger(); _logger.WriteLine("----------------------------------------- NEW SESSION ----------------------------------------------"); ExcelClass xls = new ExcelClass(); try { bool cancel = false; for (int i = 0; i < xlsBooks.FileNames.Length; i++) { status.Text = "Чтение файлов"; nFiles.Text = i.ToString(); Application.DoEvents(); List<Position> instruments = new List<Position>(); int iRow = _FIRST_ROW; GroupElement group; bool exist; bool groupExist = false; try { xls.OpenDocument(xlsBooks.FileNames[i], false); _userLog.WriteLine("Открыт файл " + xlsBooks.FileNames[i]); _logger.WriteLine("Открыт файл " + xlsBooks.FileNames[i]); string shortFileName = GetShortFileName(xlsBooks.FileNames[i]); _logger.WriteLine("Короткое имя группы - " + shortFileName); string fullName = xls.GetCellStringValue("A", 1); _logger.WriteLine("Полный путь группы - " + fullName); group = new GroupElement(shortFileName, GetGroupParams(xls), fullName); int oldId; exist = GroupElement.Exist(group.Name, out oldId); if (exist) { group = new GroupElement(oldId, group.Name, group.FullName); groupExist = true; _userLog.WriteLine("Группа уже существует. Найдена группа \"" + group.Name + "\""); _logger.WriteLine("Группа уже существует. Найдена группа \"" + group.Name + "\""); } while (!xls.CellIsNullOrVoid(_nameColName, iRow) || !xls.CellIsNullOrVoid(_titleColName, iRow) || !xls.CellIsNullOrVoid(_docColName, iRow)) { ProcessOneRow2(xls, iRow, ref mess, instruments, group, shortFileName, type); iRow++; } } finally { xls.CloseDocument(); } if (instruments.Count > 0) { if (!exist) { group.WriteToDb(); group.AddGeneralFolders(@"Справочники цеха 254\"); _userLog.WriteLine("Группа записана в БД"); _logger.WriteLine("Группа \"" + group.Name + "\" записана в БД"); } } bar.Maximum = instruments.Count; bar.Value = 0; status.Text = "Запись в БД"; foreach (Position pos in instruments) { int oldPosId; if (Position.Exist(pos.Title, out oldPosId)) { int dbGroupId = Position.GetGroupId(oldPosId); if (group.Id != dbGroupId) { DialogResult result = MessageBox.Show("Позиция \"" + pos.Title + "\" уже существует и находится в другой группе (\"" + GroupElement.GetName(dbGroupId) + "\"). Перенести в группу из электронной таблицы (\"" + group.Name + "\") ?", "Внимание!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); switch (result) { case DialogResult.Cancel: cancel = true; goto Cancel; case DialogResult.Yes: pos.SetNewGroup(oldPosId, group.Id); break; } } string message; Dictionary<int, string> differentParams; if (pos.IsSimilarPositionParams(oldPosId, out message, out differentParams)) { _userLog.WriteLine(message); _logger.WriteLine(message); DialogResult result = MessageBox.Show(message + Environment.NewLine + "Обновить параметры?", "Внимание!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); switch (result) { case DialogResult.Cancel: cancel = true; goto Cancel; case DialogResult.Yes: Position.EditParametrs(oldPosId, differentParams); break; } } } else { string message; pos.IsSimilarGroupParams(group.GetParamCodes(), out message); _userLog.WriteLine(message); pos.WriteToDb2(); } bar.Increment(1); Application.DoEvents(); } _userLog.WriteLine("Записано " + instruments.Count + " позиций"); _userLog.Flush(); _userLog.WriteLine(); _logger.WriteLine("Записано " + instruments.Count + " позиций"); } Cancel: if (cancel) { _userLog.WriteLine("***Операция отменена пользователем"); _userLog.Flush(); _userLog.WriteLine(); _logger.WriteLine("***Операция отменена пользователем"); } } finally { xls.Dispose(); _userLog.Close(); } Process.Start(_USER_LOG_FULL_PATH); MessageBox.Show("Готово!"); }