Example #1
0
        public void ImportEXEL(string filename, Action <int, string> progress)
        {
            if (!File.Exists(filename))
            {
                throw new Exception("Файл книги не найден.");
            }
            if (Path.GetExtension(filename) != ".xls" && Path.GetExtension(filename) != ".xlsx")
            {
                throw new Exception("Данный формат не поддерживается.");
            }

            progress(10, "Запуск ядра Excel");
            Excel.Application exApp = new Excel.Application();// Запуск в интрактивном режиме
            //exApp.Visible = true;// Debug
            try
            {
                try
                {
                    exApp.Workbooks.Open(filename);//Открытие книги
                }
                catch
                {
                    throw new Exception("Ошибка при попытке чтения книги.");
                }

                progress(20, "Чтение настроек");
                DialogResult dialogresult = DialogResult.OK;
                int          rowExcel = 1, rowEndExcel = 1, courseCount = 1, Specialnost = 0, VidCurriculum = 0;
                int          ColumnName = 0, ColumnExam = 0, ColumnOKR = 0, ColumnFullHour = 0, ColumnLPS = 0, ColumnKP = 0, ColumnFullHour1 = 0, ColumnLPS1 = 0, ColumnFullHour2 = 0, ColumnLPS2 = 0, ColumnTotal = 0, ColumnDistance = 0;
                this.numericUpDownBeginRow.BeginInvoke((MethodInvoker)(() => int.TryParse(numericUpDownBeginRow.Text, out rowExcel)));
                this.numericUpDownEndRow.BeginInvoke((MethodInvoker)(() => int.TryParse(numericUpDownEndRow.Text, out rowEndExcel)));

                this.numericUpDownCourse.BeginInvoke((MethodInvoker)(() => int.TryParse(numericUpDownCourse.Text, out courseCount)));
                this.numericUpDownDistance.BeginInvoke((MethodInvoker)(() => int.TryParse(numericUpDownDistance.Text, out ColumnDistance)));

                this.comboBoxSpecialnost.BeginInvoke((MethodInvoker)(() => Specialnost = (int)comboBoxSpecialnost.SelectedValue));
                this.comboBoxVidCurriculum.BeginInvoke((MethodInvoker)(() => VidCurriculum = (int)comboBoxVidCurriculum.SelectedValue));
                this.dataGridView1.BeginInvoke((MethodInvoker)(() =>
                {
                    int.TryParse(dataGridView1["ColumnName", dataGridView1.RowCount - 1].Value.ToString(), out ColumnName);
                    //int.TryParse(dataGridView1["ColumnExam", dataGridView1.RowCount - 1].Value.ToString(), out ColumnExam);
                    int.TryParse(dataGridView1["ColumnOKR", dataGridView1.RowCount - 1].Value.ToString(), out ColumnOKR);
                    int.TryParse(dataGridView1["ColumnFullHour", dataGridView1.RowCount - 1].Value.ToString(), out ColumnFullHour);
                    int.TryParse(dataGridView1["ColumnLPS", dataGridView1.RowCount - 1].Value.ToString(), out ColumnLPS);
                    int.TryParse(dataGridView1["ColumnKP", dataGridView1.RowCount - 1].Value.ToString(), out ColumnKP);
                    int.TryParse(dataGridView1["ColumnFullHour1", dataGridView1.RowCount - 1].Value.ToString(), out ColumnFullHour1);
                    int.TryParse(dataGridView1["ColumnLPS1", dataGridView1.RowCount - 1].Value.ToString(), out ColumnLPS1);
                    int.TryParse(dataGridView1["ColumnFullHour2", dataGridView1.RowCount - 1].Value.ToString(), out ColumnFullHour2);
                    int.TryParse(dataGridView1["ColumnLPS2", dataGridView1.RowCount - 1].Value.ToString(), out ColumnLPS2);
                    int.TryParse(dataGridView1["ColumnTotal", dataGridView1.RowCount - 1].Value.ToString(), out ColumnTotal);
                }));


                //exApp.DisplayAlerts = false;
                exApp.Workbooks.Open(filename);

                Excel.Worksheet workSheet = (Excel.Worksheet)exApp.ActiveSheet;
                //Excel.Worksheet workSheet = (Excel.Worksheet)exApp.Worksheets.get_Item("Группа");
                Thread.Sleep(1500);

                progress(25, "Чтение строк");
                for (int i = rowExcel; i <= rowEndExcel; i++)
                {
                    progress(30 + (60 / (rowEndExcel - rowExcel) * (i - rowExcel)), String.Format("Чтение дисциплин учебного плана {0}/{1}", (i - rowExcel), (rowEndExcel - rowExcel)));
                    int     okr = 0, exam = 0;
                    Predmet predmet = new Predmet();
                    predmet.Specialnost   = Specialnost;
                    predmet.CK            = -1;
                    predmet.VidCurriculum = VidCurriculum;

                    predmet.NazvaniePolnoe = workSheet.Cells[i, ColumnName].Text.ToString();
                    predmet.Nazvanie       = ClassMain.GenerationName(predmet.NazvaniePolnoe);
                    //int.TryParse((workSheet.Cells[i, ColumnExam] as Excel.Range).Value, out exam);
                    int.TryParse(workSheet.Cells[i, ColumnOKR].Text.ToString(), out okr);
                    if (!int.TryParse(workSheet.Cells[i, ColumnFullHour].Text.ToString(), out predmet.AllHour))
                    {
                        continue;
                    }
                    int.TryParse(workSheet.Cells[i, ColumnLPS].Text.ToString(), out predmet.LabHour);
                    int.TryParse(workSheet.Cells[i, ColumnKP].Text.ToString(), out predmet.CourseworkHour);
                    if (predmet.NazvaniePolnoe == "" || predmet.AllHour <= 0)
                    {
                        continue;
                    }


                    for (int j = courseCount - 1; j >= 0; j--)
                    {
                        PredmetCourse predmetcourse = new PredmetCourse();
                        if (workSheet.Cells[i, ColumnTotal + (ColumnDistance * j)].Text.ToString() == "" ||
                            !int.TryParse(workSheet.Cells[i, ColumnTotal + (ColumnDistance * j)].Text.ToString(), out predmetcourse.AllHour))
                        {
                            continue;
                        }
                        if (predmetcourse.AllHour <= 0)
                        {
                            continue;
                        }
                        predmetcourse.Course = j + 1;
                        predmetcourse.OKR    = okr; okr = 0;

                        PredmetSemester predmetsemester = new PredmetSemester();
                        if (workSheet.Cells[i, ColumnFullHour2 + (ColumnDistance * j)].Text.ToString() != "" &&
                            int.TryParse(workSheet.Cells[i, ColumnFullHour2 + (ColumnDistance * j)].Text.ToString(), out predmetsemester.AllHour))
                        {
                            predmetsemester.Semester = 2;
                            if (workSheet.Cells[i, ColumnLPS2 + (ColumnDistance * j)].Text.ToString() != "")
                            {
                                int.TryParse(workSheet.Cells[i, ColumnLPS2 + (ColumnDistance * j)].Text.ToString(), out predmetsemester.LabHour);
                            }
                            predmetcourse.predmetsemester.Add(predmetsemester);
                        }
                        predmetsemester = new PredmetSemester();
                        if (workSheet.Cells[i, ColumnFullHour1 + (ColumnDistance * j)].Text.ToString() != "" &&
                            int.TryParse(workSheet.Cells[i, ColumnFullHour1 + (ColumnDistance * j)].Text.ToString(), out predmetsemester.AllHour))
                        {
                            predmetsemester.Semester = 1;
                            if (workSheet.Cells[i, ColumnLPS1 + (ColumnDistance * j)].Text.ToString() != "")
                            {
                                int.TryParse(workSheet.Cells[i, ColumnLPS1 + (ColumnDistance * j)].Text.ToString(), out predmetsemester.LabHour);
                            }
                            predmetcourse.predmetsemester.Add(predmetsemester);
                        }

                        predmet.predmetcourse.Add(predmetcourse);
                    }
                    if (dialogresult != DialogResult.Yes)
                    {
                        FormEdit.FormEditPredmet_Curse form = new FormEditPredmet_Curse(-2, predmet);
                        dialogresult = form.ShowDialog();
                    }
                    else
                    {
                        FormEdit.FormEditPredmet_Curse form = new FormEditPredmet_Curse(-3, predmet);
                        dialogresult = form.ShowDialog();
                    }
                    if (dialogresult == DialogResult.Cancel)
                    {
                        break;
                    }
                    Thread.Sleep(10);
                }
            }
            catch
            {
                throw new Exception("Таблицы не удалось импортировать.");
            }
            finally
            {
                progress(95, "Завершение работы ядра Excel");
                exApp.Quit();
            }
        }