Exemple #1
0
    /// <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("Готово!");
    }