Exemple #1
0
 private static void ShowExplanation(StringDifferentValueHandler stringDifferentValueHandler, int indexBegin, Excel.Worksheet ExcplanationSheet)
 {
     for (int j = 0; j < stringDifferentValueHandler.Values.Count; j++)
     {
         ExcplanationSheet.Cells[j + 2, indexBegin]     = stringDifferentValueHandler.Values[j];
         ExcplanationSheet.Cells[j + 2, indexBegin + 1] = j;
     }
 }
Exemple #2
0
        static void Main(string[] args)
        {
            var ExcelApp = new Excel.Application();

            ExcelApp.ScreenUpdating       = false;
            ExcelApp.Visible              = false;
            ExcelApp.Interactive          = false;
            ExcelApp.IgnoreRemoteRequests = true;

            DTMorning = DTMorning.AddHours(6);
            DTDay     = DTDay.AddHours(12);
            DTEvening = DTEvening.AddHours(18);
            //var Month = Enumerable.Range(1, 12).Select(i => new { I = i, M = DateTimeFormatInfo.CurrentInfo.GetMonthName(i) });

            // Массив праздников в ноябре 2018 и 2019
            DateTime[] PartyMassive = new DateTime[] {
                DateTime.Parse("04.11.2018"),
                DateTime.Parse("05.11.2018"),
                DateTime.Parse("01.01.2019"),
                DateTime.Parse("02.01.2019"),
                DateTime.Parse("03.01.2019"),
                DateTime.Parse("04.01.2019"),
                DateTime.Parse("05.01.2019"),
                DateTime.Parse("06.01.2019"),
                DateTime.Parse("07.01.2019"),
                DateTime.Parse("08.01.2019"),
                DateTime.Parse("23.02.2019"),
                DateTime.Parse("03.05.2019"),
                DateTime.Parse("01.05.2019"),
                DateTime.Parse("02.05.2019"),
                DateTime.Parse("03.05.2019"),
                DateTime.Parse("09.05.2019"),
                DateTime.Parse("10.05.2019"),
                DateTime.Parse("12.06.2019"),
                DateTime.Parse("04.11.2019"),
                DateTime.Parse("31.12.2019"),
            };

            List <string> dayOfWeekMassive = new List <string>(new string[] { "понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье", });

            string sheetName         = @"Data";         // Название листа откуда берётся информация
            string sheetResultName   = @"DataResult";   // Название листа откуда куда поместятся преобразованные данные
            string sheetExcplanation = @"Excplanation"; // Название листа где будет обозначение данных

            //Console.WriteLine("Название листа, откуда берётся информация должно быть: " + sheetName);
            //string fName = @"C:\Users\35498\source\repos\DataSetExcel\Neuro\NewData\DataT.xlsx"; // Файл Excel, с которым производится работа
            //Console.WriteLine("Выбрать файл?: " + fName + " ? (n for no)");
            //string str = Console.ReadLine();
            //if (str == "n")
            //{
            //    Console.WriteLine("Введите файл");
            //    fName = Console.ReadLine();
            //}

            //if (str.Contains(@":\")) { fName = str; }

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.InitialDirectory = @"C:\Users\35498\source\repos\DataSetExcel\Neuro\NewData\";
            if (ofd.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            string fName = ofd.FileName;

            Console.WriteLine("выполнение..");

            // Название колонок, находящееся в первой строки листа Excel, откуда будут поступать данные
            string COLUMN_DATA_NAME_FROM          = "Дата";
            string COLUMN_TIME_NAME_FROM          = "Время";
            string COLUMN_TYPEDTP_NAME_FROM       = "Вид ДТП";
            string COLUMN_ROAD_NAME_FROM          = "Дорога";
            string COLUMN_KILOMETR_NAME_FROM      = "Километр";
            string COLUMN_METR_NAME_FROM          = "Метр";
            string COLUMN_NDU_NAME_FROM           = "НДУ";
            string COLUMN_FACTORS_NAME_FROM       = "Факторы, влияющие на режим движения";
            string COLUMN_STATUSROAD_NAME_FROM    = "Состояние проезжей части";
            string COLUMN_STATUSWEATHER_NAME_FROM = "Состояние погоды";
            string COLUMN_LIGHT_NAME_FROM         = "Освещение";
            string COLUMN_POINT_NAME_FROM         = "Является местом концентрации ДТП";
            string COLUMN_BAD_NAME_FROM           = "Непосредственные нарушения ПДД";

            // Название колонок, которые будут в результирующем листе
            string COLUMN_DAY_NAME           = "День";
            string COLUMN_MONTH_NAME         = "Месяц";
            string COLUMN_WEEK_NAME          = "День недели";
            string COLUMN_PARTY_NAME         = "Праздник";
            string COLUMN_TIMEOFDAY_NAME     = "Время";
            string COLUMN_TYPEDTP_NAME       = "Вид ДТП";
            string COLUMN_ROAD_NAME          = "Дорога";
            string COLUMN_KILOMETR_NAME      = "Километр";
            string COLUMN_METR_NAME          = "Метр";
            string COLUMN_NDU_NAME           = "НДУ";
            string COLUMN_FACTORS_NAME       = "Факторы, влияющие на режим движения";
            string COLUMN_STATUSROAD_NAME    = "Состояние проезжей части";
            string COLUMN_STATUSWEATHER_NAME = "Состояние погоды";
            string COLUMN_LIGHT_NAME         = "Освещение";
            string COLUMN_POINT_NAME         = "Является местом концентрации ДТП";
            string COLUMN_BAD_NAME           = "Непосредственные нарушения ПДД";

            // Название колонок, обозначающих сопоставленное ячейке число
            string SUFFIX_IN_EXPLANATION = "Число";

            var wb = ExcelApp.Workbooks.Open(fName);

            try
            {
                var             sheet = (Excel.Worksheet)wb.Worksheets[sheetName];
                Excel.Worksheet resultSheet;
                Excel.Worksheet ExcplanationSheet;

gg1:
                try
                {
                    resultSheet      = (Excel.Worksheet)wb.Worksheets[sheetResultName];
                    sheetResultName += "1";
                    goto gg1;
                }
                catch { }

gg2:
                try
                {
                    ExcplanationSheet  = (Excel.Worksheet)wb.Worksheets[sheetExcplanation];
                    sheetExcplanation += "1";
                    goto gg2;
                }
                catch { }

                ((Excel.Worksheet)wb.Worksheets.Add()).Name = sheetResultName;
                resultSheet = (Excel.Worksheet)wb.Worksheets[sheetResultName];
                ((Excel.Worksheet)wb.Worksheets.Add()).Name = sheetExcplanation;
                ExcplanationSheet = (Excel.Worksheet)wb.Worksheets[sheetExcplanation];

                int columnFromData        = GetColumnIndex(sheet, COLUMN_DATA_NAME_FROM);
                int columnFromTime        = GetColumnIndex(sheet, COLUMN_TIME_NAME_FROM);
                int columnFromTypeDTP     = GetColumnIndex(sheet, COLUMN_TYPEDTP_NAME_FROM);
                int columnFromRoad        = GetColumnIndex(sheet, COLUMN_ROAD_NAME_FROM);
                int columnFromKilometr    = GetColumnIndex(sheet, COLUMN_KILOMETR_NAME_FROM);
                int columnFromMetr        = GetColumnIndex(sheet, COLUMN_METR_NAME_FROM);
                int columnFromNDU         = GetColumnIndex(sheet, COLUMN_NDU_NAME_FROM);
                int columnFromFactors     = GetColumnIndex(sheet, COLUMN_FACTORS_NAME_FROM);
                int columnFromStatRoad    = GetColumnIndex(sheet, COLUMN_STATUSROAD_NAME_FROM);
                int columnFromStatWeather = GetColumnIndex(sheet, COLUMN_STATUSWEATHER_NAME_FROM);
                int columnFromLight       = GetColumnIndex(sheet, COLUMN_LIGHT_NAME_FROM);
                int columnFromPoint       = GetColumnIndex(sheet, COLUMN_POINT_NAME_FROM);
                int columnFromBAD         = GetColumnIndex(sheet, COLUMN_BAD_NAME_FROM);

                StringDifferentValueHandler sdvhTypeDTP     = new StringDifferentValueHandler();    //
                StringDifferentValueHandler sdvhRoad        = new StringDifferentValueHandler();
                StringDifferentValueHandler sdvhNDU         = new StringDifferentValueHandler();    //
                StringDifferentValueHandler sdvhFactor      = new StringDifferentValueHandler();    //
                StringDifferentValueHandler sdvhStatRoad    = new StringDifferentValueHandler();    //
                StringDifferentValueHandler sdvhStatWeather = new StringDifferentValueHandler();    //
                StringDifferentValueHandler sdvhLight       = new StringDifferentValueHandler();    //
                StringDifferentValueHandler sdvhBAD         = new StringDifferentValueHandler();    //
                StringDifferentValueHandler sdvhWeekDays    = new StringDifferentValueHandler();
                sdvhWeekDays.Add(dayOfWeekMassive.ToArray());

                ///////////----------------------------////////////////////
                int i = 2;
                for (i = 2; sheet.Cells[i, 1].Value != null; i++)
                {
                    sdvhTypeDTP.Add(ParseString(sheet.Cells[i, columnFromTypeDTP].Text).ToArray());

                    sdvhNDU.Add(ParseString(sheet.Cells[i, columnFromNDU].Text).ToArray());

                    sdvhFactor.Add(ParseString(sheet.Cells[i, columnFromFactors].Text).ToArray());

                    sdvhStatRoad.Add(ParseString(sheet.Cells[i, columnFromStatRoad].Text).ToArray());

                    sdvhStatWeather.Add(ParseString(sheet.Cells[i, columnFromStatWeather].Text).ToArray());

                    sdvhLight.Add(ParseString(sheet.Cells[i, columnFromLight].Text).ToArray());

                    sdvhBAD.Add(ParseString(sheet.Cells[i, columnFromBAD].Text).ToArray());
                }

                int columnIndex = 1;
                resultSheet.Cells[1, columnIndex] = COLUMN_DAY_NAME;
                int res_COLUMN_DAY = columnIndex;
                columnIndex++;
                resultSheet.Cells[1, columnIndex] = COLUMN_MONTH_NAME;
                int res_COLUMN_MONTH = columnIndex;
                columnIndex++;
                resultSheet.Cells[1, columnIndex] = COLUMN_WEEK_NAME;
                int res_COLUMN_WEEK = columnIndex;
                columnIndex++;
                resultSheet.Cells[1, columnIndex] = COLUMN_PARTY_NAME;
                int res_COLUMN_PARTY = columnIndex;
                columnIndex++;
                resultSheet.Cells[1, columnIndex] = COLUMN_TIMEOFDAY_NAME;
                int res_TIMEOFDAY_PARTY = columnIndex;

                int res_TYPEDTP = columnIndex + 1;
                for (int k = 0; k < sdvhTypeDTP.Values.Count; k++)
                {
                    resultSheet.Cells[1, res_TYPEDTP + k] = sdvhTypeDTP.Values[k];
                }

                columnIndex = res_TYPEDTP + sdvhTypeDTP.Values.Count;
                resultSheet.Cells[1, columnIndex] = COLUMN_ROAD_NAME;
                int res_ROAD = columnIndex;
                columnIndex++;
                resultSheet.Cells[1, columnIndex] = COLUMN_KILOMETR_NAME;
                int res_KILOMETR = columnIndex;
                columnIndex++;
                resultSheet.Cells[1, columnIndex] = COLUMN_METR_NAME;
                int res_METR = columnIndex;

                //**//
                //columnIndex++;
                int resBegin_NDU = columnIndex + 1;
                for (int k = 0; k < sdvhNDU.Values.Count; k++)
                {
                    resultSheet.Cells[1, resBegin_NDU + k] = sdvhNDU.Values[k];
                }
                //**//
                columnIndex = resBegin_NDU + sdvhNDU.Values.Count;
                int resBegin_FACTOR = columnIndex;
                for (int k = 0; k < sdvhFactor.Values.Count; k++)
                {
                    resultSheet.Cells[1, resBegin_FACTOR + k] = sdvhFactor.Values[k];
                }

                int res_STATUSROAD = resBegin_FACTOR + sdvhFactor.Values.Count;
                for (int k = 0; k < sdvhStatRoad.Values.Count; k++)
                {
                    resultSheet.Cells[1, res_STATUSROAD + k] = sdvhStatRoad.Values[k];
                }

                int res_STATUSWEATHER = res_STATUSROAD + sdvhStatRoad.Values.Count;
                for (int k = 0; k < sdvhStatWeather.Values.Count; k++)
                {
                    resultSheet.Cells[1, res_STATUSWEATHER + k] = sdvhStatWeather.Values[k];
                }

                int res_LIGHT = res_STATUSWEATHER + sdvhStatWeather.Values.Count;
                for (int k = 0; k < sdvhLight.Values.Count; k++)
                {
                    resultSheet.Cells[1, res_LIGHT + k] = sdvhLight.Values[k];
                }

                columnIndex = res_LIGHT + sdvhLight.Values.Count;
                resultSheet.Cells[1, columnIndex] = COLUMN_POINT_NAME;
                int res_POINT = columnIndex;
                //**//
                columnIndex++;
                int resBegin_BAD = columnIndex;
                for (int k = 0; k < sdvhBAD.Values.Count; k++)
                {
                    resultSheet.Cells[1, resBegin_BAD + k] = sdvhBAD.Values[k];
                }

                i = 2;
                int t;
                for (i = 2; sheet.Cells[i, 1].Value != null; i++)
                {
                    DateTime dt = DateTime.Parse(sheet.Cells[i, columnFromData].Text);
                    resultSheet.Cells[i, res_COLUMN_DAY]   = dt.Day;
                    resultSheet.Cells[i, res_COLUMN_MONTH] = dt.Month;
                    resultSheet.Cells[i, res_COLUMN_WEEK]  = dayOfWeekMassive.IndexOf(dt.ToString("dddd"));
                    resultSheet.Cells[i, res_COLUMN_PARTY] = PartyMassive.Contains(dt) ? 1 : 0;

                    DateTime tm  = new DateTime();
                    var      tmp = sheet.Cells[i, columnFromTime].Text.Split(':');
                    tm = tm.AddHours(Convert.ToInt32(tmp[0]));
                    tm = tm.AddMinutes(Convert.ToInt32(tmp[1]));
                    resultSheet.Cells[i, res_TIMEOFDAY_PARTY] = (double)tm.Hour + ((double)tm.Minute) / 60.0;//GetTimeOfDay(tm);

                    var newRowOfTypeDTP = new bool[sdvhTypeDTP.Values.Count];
                    var lstTypeDTP      = ParseString(sheet.Cells[i, columnFromTypeDTP].Text);
                    foreach (var itm in lstTypeDTP)
                    {
                        newRowOfTypeDTP[sdvhTypeDTP[itm]] = true;
                    }
                    for (t = 0; t < newRowOfTypeDTP.Length; t++)
                    {
                        resultSheet.Cells[i, res_TYPEDTP + t] = (newRowOfTypeDTP[t] ? 1 : 0);
                    }

                    string road          = sheet.Cells[i, columnFromRoad].Text;
                    int    typeRoadIndex = sdvhRoad.Add(road);
                    resultSheet.Cells[i, res_ROAD] = typeRoadIndex;

                    resultSheet.Cells[i, res_KILOMETR] = sheet.Cells[i, columnFromKilometr].Text;

                    resultSheet.Cells[i, res_METR] = sheet.Cells[i, columnFromMetr].Text;

                    var newRowOfNDU = new bool[sdvhNDU.Values.Count];
                    var lstNDU      = ParseString(sheet.Cells[i, columnFromNDU].Text);
                    foreach (var itm in lstNDU)
                    {
                        newRowOfNDU[sdvhNDU[itm]] = true;
                    }
                    for (t = 0; t < newRowOfNDU.Length; t++)
                    {
                        resultSheet.Cells[i, resBegin_NDU + t] = (newRowOfNDU[t] ? 1 : 0);
                    }

                    var newRowOfFactor = new bool[sdvhFactor.Values.Count];
                    var lstFactor      = ParseString(sheet.Cells[i, columnFromFactors].Text);
                    foreach (var itm in lstFactor)
                    {
                        newRowOfFactor[sdvhFactor[itm]] = true;
                    }
                    for (t = 0; t < newRowOfFactor.Length; t++)
                    {
                        resultSheet.Cells[i, resBegin_FACTOR + t] = (newRowOfFactor[t] ? 1 : 0);
                    }

                    var newRowOfStatRoad = new bool[sdvhStatRoad.Values.Count];
                    var lstStatRoad      = ParseString(sheet.Cells[i, columnFromStatRoad].Text);
                    foreach (var itm in lstStatRoad)
                    {
                        newRowOfStatRoad[sdvhStatRoad[itm]] = true;
                    }
                    for (t = 0; t < newRowOfStatRoad.Length; t++)
                    {
                        resultSheet.Cells[i, res_STATUSROAD + t] = (newRowOfStatRoad[t] ? 1 : 0);
                    }

                    var newRowOfStatWeather = new bool[sdvhStatWeather.Values.Count];
                    var lstStatWeather      = ParseString(sheet.Cells[i, columnFromStatWeather].Text);
                    foreach (var itm in lstStatWeather)
                    {
                        newRowOfStatWeather[sdvhStatWeather[itm]] = true;
                    }
                    for (t = 0; t < newRowOfStatWeather.Length; t++)
                    {
                        resultSheet.Cells[i, res_STATUSWEATHER + t] = (newRowOfStatWeather[t] ? 1 : 0);
                    }

                    var newRowOflight = new bool[sdvhLight.Values.Count];
                    var lstlight      = ParseString(sheet.Cells[i, columnFromLight].Text);
                    foreach (var itm in lstlight)
                    {
                        newRowOflight[sdvhLight[itm]] = true;
                    }
                    for (t = 0; t < newRowOflight.Length; t++)
                    {
                        resultSheet.Cells[i, res_LIGHT + t] = (newRowOflight[t] ? 1 : 0);
                    }

                    string point = sheet.Cells[i, columnFromPoint].Text;
                    resultSheet.Cells[i, res_POINT] = (point.Trim().ToLower() == "да" ? 1 : 0);

                    var newRowOfBAD = new bool[sdvhBAD.Values.Count];
                    var lstBAD      = ParseString(sheet.Cells[i, columnFromBAD].Text);
                    foreach (var itm in lstBAD)
                    {
                        newRowOfBAD[sdvhBAD[itm]] = true;
                    }
                    for (t = 0; t < newRowOfBAD.Length; t++)
                    {
                        resultSheet.Cells[i, resBegin_BAD + t] = (newRowOfBAD[t] ? 1 : 0);
                    }

                    //if (i > 40) break;
                }

                ///////////----------------------------////////////////////

                int ii = 1;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_WEEK_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;//+ COLUMN_WEEK_NAME;
                for (int j = 0; j < dayOfWeekMassive.Count; j++)
                {
                    ExcplanationSheet.Cells[j + 2, ii]     = dayOfWeekMassive[j];
                    ExcplanationSheet.Cells[j + 2, ii + 1] = j;
                }
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_TYPEDTP_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;//+ COLUMN_TYPEDTP_NAME;
                ShowExplanation(sdvhTypeDTP, ii, ExcplanationSheet);
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_ROAD_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;// + COLUMN_ROAD_NAME;
                ShowExplanation(sdvhRoad, ii, ExcplanationSheet);
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_NDU_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;// + COLUMN_NDU_NAME;
                ShowExplanation(sdvhNDU, ii, ExcplanationSheet);
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_FACTORS_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;// + COLUMN_FACTORS_NAME;
                ShowExplanation(sdvhFactor, ii, ExcplanationSheet);
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_STATUSROAD_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;// + COLUMN_STATUSROAD_NAME;
                ShowExplanation(sdvhStatRoad, ii, ExcplanationSheet);
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_STATUSWEATHER_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;// + COLUMN_STATUSWEATHER_NAME;
                ShowExplanation(sdvhStatWeather, ii, ExcplanationSheet);
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_LIGHT_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;// + COLUMN_LIGHT_NAME;
                ShowExplanation(sdvhLight, ii, ExcplanationSheet);
                ii += 2;
                ExcplanationSheet.Cells[1, ii]     = COLUMN_BAD_NAME;
                ExcplanationSheet.Cells[1, ii + 1] = SUFFIX_IN_EXPLANATION;// + COLUMN_BAD_NAME;
                ShowExplanation(sdvhBAD, ii, ExcplanationSheet);

                ExcplanationSheet.Columns.EntireColumn.AutoFit();
                resultSheet.Columns.EntireColumn.AutoFit();

                Console.WriteLine("Всего " + i);
            }
            catch (Exception e)
            {
                Console.WriteLine("!!!!");
                Console.WriteLine(e.Message);
            }


            ExcelApp.ScreenUpdating       = true;
            ExcelApp.Interactive          = true;
            ExcelApp.IgnoreRemoteRequests = false;
            ExcelApp.Visible = true;
            Console.WriteLine("Для выхода нажмиту любую клавишу...");
            Console.ReadKey();
        }