private static void AddCellInfo(Worksheet worksheet, CellIndex cellIndex, string teacherName, string weeks)
        {
            var prevWeeks = worksheet.Cells[cellIndex.x, cellIndex.y + 1].Text.ToString();

            var hasPrevWeeks = !string.IsNullOrEmpty(prevWeeks);

            if (!hasPrevWeeks)
            {
                worksheet.Cells[cellIndex.x, cellIndex.y]     = teacherName;
                worksheet.Cells[cellIndex.x, cellIndex.y + 1] = weeks;
                return;
            }

            var prevName = worksheet.Cells[cellIndex.x, cellIndex.y].Text.ToString();

            if (prevName != teacherName)
            {
                worksheet.Cells[cellIndex.x, cellIndex.y]     = prevName + "/\n" + teacherName;
                worksheet.Cells[cellIndex.x, cellIndex.y + 1] = prevWeeks + "/\n" + weeks;
            }
            else
            {
                worksheet.Cells[cellIndex.x, cellIndex.y + 1] = prevWeeks + ", " + weeks;
            }

            List <int> prevWeeksList = Utils.Utils.ParseWeeks(prevWeeks);
            List <int> currWeeksList = Utils.Utils.ParseWeeks(weeks);

            if (prevWeeksList.Intersect(currWeeksList).Any())
            {
                GenericExcelExport.SetCellBackground(worksheet, cellIndex, new CellIndex {
                    x = cellIndex.x, y = cellIndex.y + 1
                }, XlRgbColor.rgbRed);
            }
        }
        private static void FillTable(DataTable dataTable, Worksheet worksheet)
        {
            List <TeacherWeeksWithCellIndex> teachersData = new List <TeacherWeeksWithCellIndex>();

            var currentTime = -1;

            foreach (DataRow row in dataTable.Rows)
            {
                var dayName          = row[0].ToString();
                var lessonTimeNumber = LessonTimeDto.GetNumberFromPeriod(row[1].ToString());
                var classroom        = row[2].ToString();
                var cellIndex        = GetIndexByDayLessonClassroom(dayName, lessonTimeNumber, classroom);

                if (currentTime != lessonTimeNumber)
                {
                    teachersData.Clear(); //we dont give a f**k if teacher has same classes on different lesson times
                    currentTime = lessonTimeNumber;
                }

                var teacherName = string.Format("{0} {1}", row[3], row[4]);
                var weeks       = row[5].ToString();

                AddCellInfo(worksheet, cellIndex, teacherName, weeks);

                TeacherWeeksWithCellIndex currentTeacherData = new TeacherWeeksWithCellIndex
                {
                    CellIndex   = cellIndex,
                    TeacherName = teacherName,
                    Weeks       = Utils.Utils.ParseWeeks(weeks),
                    DayName     = dayName
                };

                foreach (var teacherData in teachersData)
                {
                    //teacher has more than one lesson in same time
                    if (teacherData.TeacherName == currentTeacherData.TeacherName &&
                        teacherData.DayName == currentTeacherData.DayName &&
                        teacherData.Weeks.Intersect(currentTeacherData.Weeks).Any())
                    {
                        GenericExcelExport.SetCellBackground(worksheet, teacherData.CellIndex,
                                                             new CellIndex {
                            x = teacherData.CellIndex.x, y = teacherData.CellIndex.y + 1
                        }, XlRgbColor.rgbIndianRed);
                        GenericExcelExport.SetCellBackground(worksheet, currentTeacherData.CellIndex,
                                                             new CellIndex {
                            x = currentTeacherData.CellIndex.x, y = currentTeacherData.CellIndex.y + 1
                        }, XlRgbColor.rgbIndianRed);
                    }
                }

                teachersData.Add(currentTeacherData);
            }
        }