/// <summary> /// Считывание разбивки на режимы (используется для формирования R-file) из xlsx файла формата 9.41-сц2 /// </summary> /// <param name="filename"></param> /// <returns></returns> public override List <KadrIntervals> KadrIntervalsReadFromExcel(string filename) { //считываем данные из Excel файла в двумерный массив Excel.Application xlApp = new Excel.Application(); //Excel Excel.Workbook xlWB; //рабочая книга Excel.Worksheet xlSht; //лист Excel xlWB = xlApp.Workbooks.Open(filename); //название файла Excel int NShts = xlWB.Worksheets.Count; List <KadrIntervals> KadrIntervalsList = new List <KadrIntervals>(); try { foreach (Excel.Worksheet sheet in xlWB.Worksheets) { int iLastRow = sheet.Cells[sheet.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row; var arrData = (object[, ])sheet.Range["A5:H" + iLastRow].Value; //берём данные с листа Excel KadrIntervals kadrIntervals = new KadrIntervals(); List <KadrInterval> intervals = new List <KadrInterval>(); //заполняем intervals данными из массива int i; for (i = 1; i <= arrData.GetUpperBound(0); i++) { double t = (double)arrData[i, 1] * 3_600_000 * 24; long tbeg = (long)t; double te = t + 3_600_000 * 24; if (i != arrData.GetUpperBound(0)) { te = (double)arrData[i + 1, 1] * 3_600_000 * 24; } long tend = (long)te; string[] kadrs = new string[arrData.GetUpperBound(1) - 1]; int j; for (j = 2; j <= arrData.GetUpperBound(1); j++) { kadrs[j - 2] = (string)arrData[i, j]; } KadrInterval I = new KadrInterval(kadrs, tbeg, tend); intervals.Add(I); } kadrIntervals.Intervals = intervals; kadrIntervals.Id = sheet.Cells[2, "H"].Value.ToString(); kadrIntervals.tags = new List <string>(); var arrDataTags = (object[, ])sheet.Range["A2:H2"].Value; for (i = 1; i <= 8; i++) { if (arrDataTags[1, i] != null) { kadrIntervals.tags.Add(arrDataTags[1, i].ToString()); } } kadrIntervals.filename = "NONE!"; KadrIntervalsList.Add(kadrIntervals); } } catch (Exception e) { MessageBox.Show("SpecialFor9_41_SCENARY4.KadrIntervalsReadFromExcel - Ошибка считывания файла " + filename + " : " + e.Message + " Stacktrace:" + e.StackTrace); } finally { xlWB.Close(false); //закрываем книгу, изменения не сохраняем xlApp.Quit(); //закрываем Excel } return(KadrIntervalsList); }
/// <summary> /// По моему это бесполезно комментировать.... /// Короче тут происходит самое основное - вроде как смотрится каждая строка, потом выясняется в каком она кадре /// Потом .... вобщем ей назначается одна только зона в результате.... /// </summary> /// <param name="tobiiRecords"></param> /// <param name="kadrIntervals"></param> /// <param name="tabOfKeys"></param> /// <returns></returns> public List <TobiiRecord> Calculate(List <TobiiRecord> tobiiRecords, KadrIntervals kadrIntervals, TabOfKeys tabOfKeys) { // FZoneList = new List<TobiiRecord>(); foreach (var TR in tobiiRecords)//проходим по всем записям { foreach (var zone in TR.zones) { int MFINumber; string kadr; int Fzone; MFINumber = SpecialFor9_41_SCENARY2.GetMFINumber(zone); kadr = kadrIntervals.GetKadr(TR.time_ms, MFINumber); if (kadr == "") { throw new Exception("Не могу найти подходящий кадр для интервала id = " + kadrIntervals.Id + " при времени" + TR.time_ms); } Fzone = tabOfKeys.GetFuncZone(zone, kadr); TR.fzones.Add(Fzone); } TR.fzones = TR.fzones.Distinct().ToList(); //Убираем нулевые зоны if (TR.fzones.Count() > 1) { if (TR.fzones.Contains(0)) { TR.fzones.Remove(0); } } //убираем низкоприоритетные зоны - тут например убрали зоны "кадр БР целиком" for (int i = 0; i < 5; i++) { if (TR.fzones.Count() > 1) { if (TR.fzones.Contains(18)) { TR.fzones.Remove(18); } } if (TR.fzones.Count() > 1) { if (TR.fzones.Contains(19)) { TR.fzones.Remove(19); } } if (TR.fzones.Count() > 1) { if (TR.fzones.Contains(20)) { TR.fzones.Remove(20); } } } if (TR.fzones.Count() > 0) { TR.CurFZone = TR.fzones.First(); } if (TR.fzones.Count() == 0) { TR.CurFZone = -1; } } return(tobiiRecords); }