Пример #1
0
        private void button3_Click(object sender, EventArgs e)
        {
            exel.Application application = new exel.Application();
            exel.Sheets      sheets;
            exel.Worksheet   worksheet;
            exel.Range       cells;
            application.SheetsInNewWorkbook = 1;
            application.Workbooks.Add(Type.Missing);
            sheets         = application.ActiveWorkbook.Sheets;
            worksheet      = (exel.Worksheet)sheets.get_Item(1);
            worksheet.Name = "Статистика обновления";
            worksheet.Activate();
            int row = chart1.Series[0].Points.Count;
            int col = chart1.Series.Count;

            for (int i = 0; i < row; i++)
            {
                cells        = (exel.Range)worksheet.Cells[i + 1, 1];
                cells.Value2 = chart1.Series[0].Points[i].XValue + " г";
            }

            for (int i = 0; i < col; i++)
            {
                for (int j = 0; j < row; j++)
                {
                    cells        = (exel.Range)worksheet.Cells[j + 1, i + 2];
                    cells.Value2 = chart1.Series[i].Points[j].YValues;
                }
            }

            string cur = "c" + (row);

            cells = worksheet.get_Range("a1", cur.ToString());
            cells.Select();

            exel.Chart chart = (exel.Chart)application.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            chart.Activate();
            chart.Select(Type.Missing);

            application.ActiveChart.PlotBy = exel.XlRowCol.xlColumns;


            application.ActiveChart.HasTitle        = true;
            application.ActiveChart.ChartTitle.Text = "Обновления";

            application.ActiveChart.HasLegend                = true;
            application.ActiveChart.Legend.Position          = exel.XlLegendPosition.xlLegendPositionBottom;
            application.ActiveChart.SeriesCollection(1).Name = "Требуется обновить";
            application.ActiveChart.SeriesCollection(2).Name = "Обновлено";


            application.ActiveChart.ChartType = exel.XlChartType.xlColumnClustered;
            application.ActiveChart.Location(exel.XlChartLocation.xlLocationAsObject, "Статистика обновления");

            application.ActiveChart.ApplyDataLabels(exel.XlDataLabelsType.xlDataLabelsShowValue, false, true, false, false, false, false, true, false, true);
            application.Visible = true;
        }
Пример #2
0
        private void btnReport_Click(object sender, EventArgs e)
        {
            ReportInfo();
            if (dateRange.Count == 0 || dataRange.Count == 0)
            {
                MessageBox.Show("Нет данных");
                return;
            }
            Excel.Application excelapp = new Excel.Application();
            excelapp.SheetsInNewWorkbook = 1;
            excelapp.Workbooks.Add(Type.Missing);
            Excel.Sheets    excelsheets    = excelapp.Worksheets;
            Excel.Worksheet excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);
            Excel.Range     excelcells     = null;
            int             rows           = dataRange.Count;

            //head
            excelcells = excelworksheet.Cells[1, 2];
            excelcells.Clear();
            excelcells.Value2 = "Прибыль";

            for (int i = 1; i <= rows; i++)
            {
                excelcells = excelworksheet.Cells[i + 1, 1];
                excelcells.Clear();
                excelcells.Value2 = dateRange[i - 1];
            }

            for (int i = 1; i <= rows; i++)
            {
                excelcells = excelworksheet.Cells[i + 1, 2];
                excelcells.Clear();
                excelcells.Value2 = dataRange[i - 1];
            }

            Excel.Range c1 = excelworksheet.Cells[1, 1];
            Excel.Range c2 = excelworksheet.Cells[dataRange.Count + 1, 2];
            excelcells = excelworksheet.get_Range(c1, c2);
            excelcells.Select();

            Excel.Chart excelchart = (Excel.Chart)excelapp.Charts.Add(Type.Missing,
                                                                      Type.Missing, Type.Missing, Type.Missing);
            excelchart.Activate();
            excelchart.Select(Type.Missing);

            excelchart.ChartTitle.Text = "Прибыль по месяцам";

            excelapp.Visible = true;
        }
Пример #3
0
        private void ExportToExcel()
        {
            progress = 0;

            Excel.Application xlApp       = new Excel.Application();
            Excel.Workbook    xlWorkbook  = xlApp.Workbooks.Add();
            Excel.Worksheet   xlWorksheet = xlWorkbook.ActiveSheet;

            for (int i = 1; i <= chart.Series.Count; i++)
            {
                xlWorksheet.Cells[i, 1] = chart.Series[i - 1].Name;
                xlWorksheet.Cells[i, 1].Borders.LineStyle   = Excel.XlLineStyle.xlContinuous;
                xlWorksheet.Cells[i, 1].Borders.Color       = Color.Black;
                xlWorksheet.Cells[i, 1].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
                progress += 4;

                for (int j = 1; j <= chart.Series[i - 1].Points.Count; j++)
                {
                    xlWorksheet.Cells[i, j + 1] = chart.Series[i - 1].Points[j - 1].YValues[0].ToString().Replace(",", ".");
                    xlWorksheet.Cells[i, j + 1].Borders.LineStyle   = Excel.XlLineStyle.xlContinuous;
                    xlWorksheet.Cells[i, j + 1].Borders.Color       = Color.Black;
                    xlWorksheet.Cells[i, j + 1].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
                    progress += 4;
                }
            }

            Excel.Chart xlChart = xlWorkbook.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            xlChart.Activate();
            xlChart.Select(Type.Missing);
            progress += 3;

            xlChart = SetStyleXlsChart(xlChart);

            try
            {
                if (chart.Titles[0].Text == null || chart.Titles[0].Text.Length == 0)
                {
                    xlWorkbook.SaveAs(Properties.Settings.Default.ChartsExcelFilesDirectoryPath + $"Chart for { DateTime.Now.ToString().Replace(":", "-").Replace("/", ".")}.xlsx");
                }
                else
                {
                    if (File.Exists(Properties.Settings.Default.ChartsExcelFilesDirectoryPath + $"{chart.Titles[0].Text}.xlsx"))
                    {
                        MessageDialog md = new MessageDialog(MessageDialog.QuestionTitle, MessageDialog.QuestionText4, MessageDialog.Icon.Question);

                        if (md.DialogResult == DialogResult.Yes)
                        {
                            goto Save;
                        }
                        else
                        {
                            goto Exit;
                        }
                    }
                    else
                    {
                        goto Save;
                    }

Save:
                    xlWorkbook.SaveAs(Properties.Settings.Default.ChartsExcelFilesDirectoryPath + $"{chart.Titles[0].Text}.xlsx");
                }
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                MessageDialog.Show(MessageDialog.ErrorTitle, e.Message, MessageDialog.Icon.Cross);
            }

Exit:
            try
            {
                xlApp.AlertBeforeOverwriting = false;
                xlApp.Visible = true;
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                MessageDialog.Show(MessageDialog.ErrorTitle, e.Message, MessageDialog.Icon.Cross);
                xlApp.Quit();
            }
        }
Пример #4
0
        private void button1_Click(object sender, EventArgs e)
        {
            string fileName;

            using (var openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Filter = "Файлы Excel (*.xls; *.xlsx) | *.xls; *.xlsx";

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    fileName = openFileDialog.FileName;

                    workBook   = ex.Workbooks.Open(fileName);
                    workSheet  = (Excel.Worksheet)workBook.Worksheets.get_Item(6); //страница с обычными данными
                    workSheet2 = (Excel.Worksheet)workBook.Worksheets.get_Item(5); //страница с данными без порогов
                    workSheetT = (Excel.Worksheet)workBook.Worksheets.get_Item(4); //страница с данными топов
                    //работать будем с 4, 5 и 6 страницей
                    Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager taskbar = Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager.Instance;
                    progressBar1.Maximum = 100;
                    progressBar2.Maximum = 100;
                    int pB2 = 0;
                    //использованное количество строк и колонок
                    int usedRowsNum    = workSheet.UsedRange.Rows.Count;
                    int usedColumnsNum = workSheet.UsedRange.Columns.Count;

                    Excel.Range c1;
                    Excel.Range c2;
                    Excel.Range c3;
                    Excel.Range oRange;
                    Excel.Range oRange5;
                    Excel.Range oRangeT;
                    Excel.Range nameR       = null;
                    Excel.Range nameR1      = null;
                    Excel.Range currentFind = null;


                    label2.Text = "Ищем ВГУЭС";
                    //если в файле есть вгуэс выделим его отдельным цветом
                    string filial = "Владивостокский государственный университет экономики и сервиса"; //Когда название сменится нужно это будет изменить
                    c1     = workSheet.Cells[2, 3];
                    oRange = (Excel.Range)workSheet.get_Range(c1, c1).Find(filial);
                    if (oRange != null)
                    {
                        // oRange.EntireColumn.Interior.ColorIndex = 7; //можно просто всю колонку окрасить но не надо
                        c1     = workSheet.Cells[1, oRange.Column];
                        c2     = workSheet.Cells[usedRowsNum, oRange.Column];
                        oRange = (Excel.Range)workSheet.get_Range(c1, c2);
                        oRange.Interior.ColorIndex = 8;
                        //на таблице топов повторим
                        c1     = workSheetT.Cells[1, oRange.Column];
                        c2     = workSheetT.Cells[usedRowsNum, oRange.Column];
                        oRange = (Excel.Range)workSheetT.get_Range(c1, c2);
                        oRange.Interior.ColorIndex = 8;
                    }
                    ;
                    progressBar1.Value = 10;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);

                    int scht = 0; //считаем и удаляем филиалы
                    int j;        //переменная для всех циклов
                    filial      = "илиал";
                    label2.Text = "Фильтруем филиалы";
                    for (j = 4; j <= usedColumnsNum; j++)
                    {
                        c2 = workSheet.Cells[2, 3];  //первая строка в колонке с данными
                        c1 = workSheet2.Cells[2, 3]; //то же самое но на 5 странице
                        c3 = workSheetT.Cells[2, 3];

                        oRange  = (Excel.Range)workSheet.get_Range(c2, c2).Find(filial);  //ищем филиалы
                        oRange5 = (Excel.Range)workSheet2.get_Range(c1, c1).Find(filial); //и в 5 странице тоже ищем
                        oRangeT = (Excel.Range)workSheetT.get_Range(c3, c3).Find(filial);
                        if (oRange != null)
                        {
                            //удаляем найденные колонки с филиалами
                            oRange.EntireColumn.Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft);
                            oRange5.EntireColumn.Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft);
                            oRangeT.EntireColumn.Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft);
                            scht++;
                        }
                        ;


                        pB2 = Poloska(pB2);
                        progressBar2.Value = pB2;
                    }

                    progressBar1.Value = 20;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);

                    label2.Text = "Ищем отношение заработной платы";
                    //ищем отношение заработной платы
                    int newColumnsNum = usedColumnsNum - scht; //новое количество колонок, без филиалов
                                                               //        oRange = (Excel.Range)workSheet.get_Range("B2", "B" + newColumnsNum.ToString()); //просматриваем названия критериев
                    bool flagZP = true;
                    c1     = workSheet.Cells[2, 2];
                    oRange = (Excel.Range)workSheet.get_Range(c1, c1).Find("Отношение заработной платы");
                    if (oRange != null)
                    {
                        //oRange.Borders.ColorIndex = 3;
                        //oRange.Interior.ColorIndex = 34;
                        string s1 = oRange.Row.ToString();
                        c3          = workSheet.Cells[s1, newColumnsNum];
                        currentFind = (Excel.Range)workSheet.get_Range(oRange, c3);
                        //currentFind.Interior.ColorIndex = 4;

                        string temp1 = oRange.get_Address(Excel.XlReferenceStyle.xlA1);
                        string temp2 = c3.get_Address(Excel.XlReferenceStyle.xlA1);

                        nameR1 = (Excel.Range)workSheet2.get_Range(temp1, temp2);
                        //nameR1.Interior.ColorIndex = 5;
                        //
                        c1    = workSheet.Cells[2, 2];
                        c3    = workSheet.Cells[2, newColumnsNum];
                        nameR = (Excel.Range)workSheet.get_Range(c1, c3);
                        //nameR.Interior.ColorIndex = 5;
                    }
                    else
                    {
                        flagZP = false;
                    }
                    progressBar1.Value = 30;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);
                    label2.Text = "Создаём книгу";
                    //создаём книгу в которую будем вносить отфильтрованные данные
                    Excel.Workbook  workBook1;
                    Excel.Worksheet workSheet1;
                    Excel.Worksheet workSheet3; //вузики
                    Excel.Worksheet workSheet4; //колледжи
                    Excel.Worksheet workSheet3T;
                    Excel.Worksheet workSheet4T;
                    //создаём новую книгу в которые будем помещать данные
                    int n = 6;
                    ex.SheetsInNewWorkbook = n;
                    workBook1 = ex.Workbooks.Add(); //тупо пожилое создание книги

                    string sS;
                    int    ls;
                    int    rs;

                    workSheet1      = (Excel.Worksheet)workBook1.Worksheets.get_Item(5);
                    workSheet1.Name = "Данные о зп в регионе";

                    if (flagZP == true)
                    {
                        //помещаем на третью страницу графики по з/п
                        label2.Text = "помещаем на страницу данные о з/п";
                        string Name = usedColumnsNum.ToString();
                        workSheet.get_Range(nameR, nameR).Copy();
                        workSheet1.get_Range("A1", "A1").PasteSpecial();
                        workSheet2.get_Range(nameR1, nameR1).Copy();
                        workSheet1.get_Range("A2", "A2").PasteSpecial();
                        workSheet.get_Range(currentFind, currentFind).Copy();
                        workSheet1.get_Range("A3", "A3").PasteSpecial();

                        //Пороговые значения, убираем то что вне скобок
                        workSheet1.Cells[3, 1] = "Пороговое значение для учреждения";
                        label2.Text            = "Создаём графики по з/п";
                        //создаём сами графики
                        Excel.Chart excelchart = (Excel.Chart)ex.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                        c1 = workSheet1.Cells[2, 3];
                        c2 = workSheet1.Cells[2, workSheet1.UsedRange.Columns.Count + 1];

                        c3 = (Excel.Range)workSheet1.get_Range(c1, c2);
                        c3.NumberFormat            = "0.00"; //данные приведём к правильному виду
                        excelchart.HasTitle        = true;
                        excelchart.ChartTitle.Text = "Отношение заработной платы педагогических работников образовательной организации к средней заработной плате по экономике региона";

                        excelchart.SetSourceData(c3);
                        excelchart.HasLegend = false;
                        excelchart.Activate();
                        ex.ActiveChart.ChartType = Excel.XlChartType.xlLineMarkers;
                        ex.ActiveChart.Location(Excel.XlChartLocation.xlLocationAsObject, "Данные о зп в регионе");

                        c1 = workSheet1.Cells[1, 3];
                        c2 = workSheet1.Cells[1, workSheet1.UsedRange.Columns.Count + 1];
                        c3 = (Excel.Range)workSheet1.get_Range(c1, c2);
                        ex.ActiveChart.FullSeriesCollection(1).XValues = c3;

                        //Перемещаем диаграмму в нужное место
                        workSheet1.Shapes.Item(1).IncrementLeft(101);
                        workSheet1.Shapes.Item(1).IncrementTop((float)200.5);
                        //Задаем размеры диаграммы
                        workSheet1.Shapes.Item(1).Height = 550;
                        workSheet1.Shapes.Item(1).Width  = 1500;
                        workSheet1.Columns.AutoFit();

                        label2.Text = "Определяем пороговые значения";
                        for (j = 3; j < newColumnsNum; j++)
                        {
                            sS = Convert.ToString(workSheet1.Cells[3, j].Text);
                            ls = sS.IndexOf('(');
                            rs = sS.IndexOf(')');
                            if ((ls != -1) && (rs != -1))
                            {
                                workSheet1.Cells[3, j] = Convert.ToDouble(sS.Substring(ls + 1, rs - ls - 1));
                                workSheet1.Cells[2, j] = Convert.ToDouble(workSheet1.Cells[2, j].Text);
                            }
                            if (workSheet1.Cells[3, j].Value >= workSheet1.Cells[2, j].Value)
                            {
                                workSheet1.Cells[2, j].Interior.ColorIndex = 3;
                            }
                            else
                            {
                                workSheet1.Cells[2, j].Interior.ColorIndex = 4;
                            }


                            pB2 = Poloska(pB2);       //заполняем полоску
                            progressBar2.Value = pB2; //присваиваем полоску
                        }
                    }
                    progressBar1.Value = 40;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);
                    //переносим высшее образование на первую страницу и среднее на вторую
                    workSheet3       = (Excel.Worksheet)workBook1.Worksheets.get_Item(1);
                    workSheet3.Name  = "Вузы значения";
                    workSheet4       = (Excel.Worksheet)workBook1.Worksheets.get_Item(2);
                    workSheet4.Name  = "Колледжи значения";
                    workSheet3T      = (Excel.Worksheet)workBook1.Worksheets.get_Item(3);
                    workSheet3T.Name = "Топ Вузов";
                    workSheet4T      = (Excel.Worksheet)workBook1.Worksheets.get_Item(4);
                    workSheet4T.Name = "Топ Колледжей";
                    //вставляем названия и обозначения критериев на страницы с колледжами и вузами
                    c2 = workSheet.Cells[1, 2];
                    c3 = workSheetT.Cells[1, 2];
                    c2.EntireColumn.Copy();
                    workSheet3.Cells[1, 1].PasteSpecial();
                    workSheet4.Cells[1, 1].PasteSpecial();
                    c3.EntireColumn.Copy();
                    workSheet3T.Cells[1, 1].PasteSpecial();
                    workSheet4T.Cells[1, 1].PasteSpecial();
                    c2 = workSheet.Cells[1, 3];
                    c3 = workSheet.Cells[1, 3];
                    c2.EntireColumn.Copy();
                    workSheet3.Cells[1, 2].PasteSpecial();
                    workSheet4.Cells[1, 2].PasteSpecial();
                    c3.EntireColumn.Copy();
                    workSheet3T.Cells[1, 2].PasteSpecial();
                    workSheet4T.Cells[1, 2].PasteSpecial();

                    progressBar1.Value = 50;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);
                    //сделать нижеследующее нужно и для четвёртой страницы(топы)
                    label2.Text = "Фильтруем высшее образование";
                    string vWord  = "высшего"; //Примечание 1*
                    int    vCount = 0;
                    for (j = 3; j <= newColumnsNum; j++)
                    {
                        c2     = workSheet.Cells[2, 3];
                        c1     = workSheetT.Cells[2, 3];
                        oRange = (Excel.Range)workSheet.get_Range(c2, c2).Find(vWord); //ищем вузы
                        if (oRange != null)
                        {
                            oRangeT = (Excel.Range)workSheetT.get_Range(c1, c1).Find(vWord);
                            oRange.EntireColumn.Copy();
                            workSheet3.Cells[1, j].PasteSpecial();
                            oRangeT.EntireColumn.Copy();
                            workSheet3T.Cells[1, j].PasteSpecial();
                            oRange.EntireColumn.Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft);
                            oRangeT.EntireColumn.Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft);
                            vCount++;
                        }
                        else
                        {
                            break;
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    ;
                    c1          = workSheet3.Cells[2, 3];
                    label2.Text = "Определяем правильность построения высшего образования";
                    c2          = (Excel.Range)workSheet3.get_Range(c1, c1).Find("программам высшего образования");
                    bool flag = false;
                    if (c2 != null)
                    {
                        flag = true;
                        vCount--;
                    }
                    label2.Text = "Отфильтровываем среднее образование";
                    //скопируем колледжи
                    if (flag == true)
                    {
                        c1 = workSheet.Cells[1, 3];
                    }
                    else
                    {
                        c1 = workSheet.Cells[1, 4];
                    }
                    c2 = workSheet.Cells[usedRowsNum, newColumnsNum - vCount];
                    workSheet.get_Range(c1, c2).Copy(); //[1,3] - AL98 (usedRows, newcolumns)
                    workSheet4.Cells[1, 3].PasteSpecial();
                    c1 = workSheet4.Cells[1, 1];
                    c2 = workSheet4.Cells[usedRowsNum, 1];
                    workSheet4.get_Range(c1, c2).Copy();
                    workSheet4.Cells[1, newColumnsNum - vCount].PasteSpecial();
                    progressBar1.Value = 60;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);

                    //label2.Text = "подгоняем формат ячеек";
                    //tryparse

                    /*      for (j = 4; j <= usedRowsNum; j++)
                     *        for (int i = 3; i <= newColumnsNum; i++)
                     *        {
                     *            c1 = workSheet4.Cells[j, i];
                     *            c2 = (Excel.Range)workSheet4.get_Range(c1, c1).Find("—");
                     *            c3 = (Excel.Range)workSheet4.get_Range(c1, c1).Find("некоррект");
                     *            if ((c2 == null) && (c3 == null))
                     *                workSheet4.Cells[j, i] = Convert.ToDouble(workSheet4.Cells[j, i]);
                     *
                     *            c1 = workSheet3.Cells[j, i];
                     *            c2 = (Excel.Range)workSheet3.get_Range(c1, c1).Find("—");
                     *            c3 = (Excel.Range)workSheet3.get_Range(c1, c1).Find("некоррект");
                     *            if ((c2 == null) && (c3 == null))
                     *                workSheet3.Cells[j, i] = Convert.ToDouble(workSheet3.Cells[j, i]);
                     *        } */
                    // —
                    // предоставленынекорректные данные
                    // 1,04(1,05)

                    progressBar1.Value = 65;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);

                    //проблема в том что в таблице строковые а не числовые значения
                    workSheet4.Cells[usedRowsNum + 2, 1] = "Ненулевые показатели";
                    workSheet4.Cells[usedRowsNum + 3, 1] = "Целевые показатели";
                    int nonullP = 0;
                    int desP    = 0;
                    label2.Text = "Записываем ненулевые и целевые показатели";
                    //Записываем ненулевые и целевые показатели
                    for (j = 4; j <= newColumnsNum - vCount; j++)
                    {
                        for (int i = 4; i <= usedRowsNum; i++)
                        {
                            sS = Convert.ToString(workSheet4.Cells[j, i].Text);
                            ls = sS.IndexOf('(');
                            rs = sS.IndexOf('—');
                            if ((sS != "0,00") || (rs != -1))
                            {
                                nonullP++;
                            }

                            if (ls != -1)
                            {
                                desP++;
                            }
                        }
                        workSheet4.Cells[usedRowsNum + 2, j - 1] = nonullP;
                        workSheet4.Cells[usedRowsNum + 3, j - 1] = desP;
                        nonullP = 0;
                        desP    = 0;

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }

                    int kCount = usedColumnsNum - scht - 3 - vCount;
                    workSheet3.Cells[usedRowsNum + 2, 1] = "Ненулевые показатели";
                    workSheet3.Cells[usedRowsNum + 3, 1] = "Целевые показатели";
                    nonullP     = 0;
                    desP        = 0;
                    label2.Text = "Записываем ненулевые и целевые показатели";
                    //Записываем ненулевые и целевые показатели
                    for (j = 4; j <= newColumnsNum - kCount; j++)
                    {
                        for (int i = 4; i <= usedRowsNum; i++)
                        {
                            sS = Convert.ToString(workSheet3.Cells[j, i].Text);
                            ls = sS.IndexOf('(');
                            rs = sS.IndexOf('—');
                            if ((sS != "0,00") || (rs != -1))
                            {
                                nonullP++;
                            }

                            if (ls != -1)
                            {
                                desP++;
                            }

                            pB2 = Poloska(pB2);       //заполняем полоску
                            progressBar2.Value = pB2; //присваиваем полоску
                        }
                        workSheet3.Cells[usedRowsNum + 2, j - 1] = nonullP;
                        workSheet3.Cells[usedRowsNum + 3, j - 1] = desP;
                        nonullP = 0;
                        desP    = 0;

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    if (flag == true)
                    {
                        c1 = workSheetT.Cells[1, 3];
                    }
                    else
                    {
                        c1 = workSheetT.Cells[1, 4];
                    }
                    c2 = workSheetT.Cells[usedRowsNum, newColumnsNum - vCount];
                    workSheetT.get_Range(c1, c2).Copy(); //[1,3] - AL98 (usedRows, newcolumns)
                    workSheet4T.Cells[1, 3].PasteSpecial();
                    c1 = workSheet4T.Cells[1, 1];
                    c2 = workSheet4T.Cells[usedRowsNum, 1];
                    workSheet4T.get_Range(c1, c2).Copy();
                    workSheet4T.Cells[1, newColumnsNum - vCount].PasteSpecial();

                    label2.Text = "Сокращаем названия учреждений";
                    //Сократим названия, сначала на листе с зп
                    for (j = 2; j < newColumnsNum; j++)
                    {
                        sS = Convert.ToString(workSheet1.Cells[1, j].Text);
                        ls = sS.IndexOf('"');
                        rs = sS.LastIndexOf('"');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet1.Cells[1, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        ls = sS.IndexOf('«');
                        rs = sS.LastIndexOf('»');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet1.Cells[1, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    //топ колледж
                    for (j = 2; j <= kCount + 2; j++)
                    {
                        sS = Convert.ToString(workSheet4T.Cells[2, j].Text);
                        ls = sS.IndexOf('"');
                        rs = sS.LastIndexOf('"');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet4T.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        ls = sS.IndexOf('«');
                        rs = sS.LastIndexOf('»');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet4T.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    //топ вуз
                    for (j = 2; j <= vCount + 2; j++)
                    {
                        sS = Convert.ToString(workSheet3T.Cells[2, j].Text);
                        ls = sS.IndexOf('"');
                        rs = sS.LastIndexOf('"');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet3T.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        ls = sS.IndexOf('«');
                        rs = sS.LastIndexOf('»');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet3T.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    //знач колледж
                    for (j = 2; j <= kCount + 2; j++)
                    {
                        sS = Convert.ToString(workSheet4.Cells[2, j].Text);
                        ls = sS.IndexOf('"');
                        rs = sS.LastIndexOf('"');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet4.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        ls = sS.IndexOf('«');
                        rs = sS.LastIndexOf('»');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet4.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    //знач вуз
                    for (j = 2; j <= vCount + 2; j++)
                    {
                        sS = Convert.ToString(workSheet3.Cells[2, j].Text);
                        ls = sS.IndexOf('"');
                        rs = sS.LastIndexOf('"');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet3.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        ls = sS.IndexOf('«');
                        rs = sS.LastIndexOf('»');
                        if ((ls != -1) && (rs != -1))
                        {
                            workSheet3.Cells[2, j] = sS.Substring(ls + 1, rs - ls - 1);
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }

                    label2.Text            = "Определяем количество вузов и колледжей";
                    workSheet1.Cells[5, 2] = "Количество вузов";
                    workSheet1.Cells[5, 3] = vCount;
                    workSheet1.Cells[6, 2] = "Количество колледжей";
                    workSheet1.Cells[6, 3] = kCount;


                    progressBar1.Value = 70;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);

                    label2.Text = "Создаём информационный лист";
                    //выбираем четвёртую страницу в новой книге и сливаем туда данные о дебаге
                    workSheet1      = (Excel.Worksheet)workBook1.Worksheets.get_Item(n);
                    workSheet1.Name = "Тесты";
                    //Данные для отладки в финале будут закомментированны
                    workSheet1.Cells[1, 1] = "Количество строк";
                    workSheet1.Cells[1, 2] = usedRowsNum;
                    workSheet1.Cells[2, 1] = "Количество колонок";
                    workSheet1.Cells[2, 2] = usedColumnsNum;
                    workSheet1.Cells[3, 1] = "Количество филиалов";
                    workSheet1.Cells[3, 2] = scht;
                    workSheet1.Cells[4, 1] = "Количество учреждений без филиалов";
                    workSheet1.Cells[4, 2] = usedColumnsNum - scht - 3;
                    workSheet1.Cells[5, 1] = "Количество вузов";
                    workSheet1.Cells[5, 2] = vCount;
                    workSheet1.Cells[6, 1] = "Количество колледжей";
                    workSheet1.Cells[6, 2] = kCount;
                    workSheet1.Cells[usedRowsNum, usedColumnsNum] = 2; //на последнюю ячейку поставим цифру для удобства
                    workSheet1.Visible = 0;
                    progressBar1.Value = 75;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);
                    //форматирование данных
                    Excel.Range rng2 = workSheet1.Range["A1", workSheet1.Cells[usedRowsNum, usedColumnsNum]];
                    rng2.Font.Size                  = 20;
                    rng2.Borders.ColorIndex         = 3;
                    rng2.Interior.ColorIndex        = 34;
                    rng2.Interior.PatternColorIndex = Excel.Constants.xlAutomatic;


                    pB2 = Poloska(pB2);       //заполняем полоску
                    progressBar2.Value = pB2; //присваиваем полоску

                    progressBar1.Value = 80;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);

                    label2.Text = "Готовим создание списков топов";
                    //не находит пустые ячейки - сосётся биба
                    oRange = workSheet4T.Range["C4", workSheet4T.Cells[usedRowsNum, kCount + 3]];
                    oRange.SpecialCells(Excel.XlCellType.xlCellTypeBlanks).Font.Color = Excel.XlRgbColor.rgbRed;
                    workSheet4T.Cells[usedRowsNum + 2, 2] = "Средний балл по всем показателям";
                    oRange.SpecialCells(Excel.XlCellType.xlCellTypeBlanks).Value = usedColumnsNum;
                    //И добавить покрас красным цветом шрифта кстати
                    oRange = workSheet3T.Range["C4", workSheet3T.Cells[usedRowsNum, vCount + 3]];
                    oRange.SpecialCells(Excel.XlCellType.xlCellTypeBlanks).Font.Color = Excel.XlRgbColor.rgbRed;
                    workSheet3T.Cells[usedRowsNum + 2, 2] = "Средний балл по всем показателям";
                    oRange.SpecialCells(Excel.XlCellType.xlCellTypeBlanks).Value = usedColumnsNum;
                    //и тут тоже покрас надо добавить

                    label2.Text = "Составляем списки топов для вузов";
                    //C4 начинаются топы (3,4) и записать среднее в usedrowsnum + 2, а usedrowsnum - 3 это количество показателей
                    for (int i = 4; i <= usedRowsNum; i++)
                    {
                        var Mfill = new List <int>();
                        for (j = 3; j < vCount + 3; j++)
                        {
                            ls = Convert.ToInt32(workSheet3T.Cells[i, j].Text);

                            if (!Mfill.Contains(ls))
                            {
                                Mfill.Add(ls);
                            }

                            pB2 = Poloska(pB2);       //заполняем полоску
                            progressBar2.Value = pB2; //присваиваем полоску
                        }
                        Mfill.Sort();
                        //Mfill.Reverse();
                        for (int k = 3; k < vCount + 3; k++)
                        {
                            workSheet3T.Cells[i, k] = Mfill.IndexOf(Convert.ToInt32(workSheet3T.Cells[i, k].Text)) + 1;
                            //формула
                            workSheet3T.Cells[i, k].NumberFormat = "0"; //данные приведём к правильному виду

                            pB2 = Poloska(pB2);                         //заполняем полоску
                            progressBar2.Value = pB2;                   //присваиваем полоску
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }

                    label2.Text = "Составляем списки топов для колледжей";
                    //то же самое и для колледжей
                    for (int i = 4; i <= usedRowsNum; i++)
                    {
                        var Mfill = new List <int>();
                        for (j = 3; j < kCount + 3; j++) //здесь было +3 но выдало ошибку на другом случае
                        {
                            ls = Convert.ToInt32(workSheet4T.Cells[i, j].Text);

                            if (!Mfill.Contains(ls))
                            {
                                Mfill.Add(ls);
                            }

                            pB2 = Poloska(pB2);       //заполняем полоску
                            progressBar2.Value = pB2; //присваиваем полоску
                        }
                        Mfill.Sort();
                        //Mfill.Reverse();
                        for (int k = 3; k < kCount + 3; k++)
                        {
                            workSheet4T.Cells[i, k] = Mfill.IndexOf(Convert.ToInt32(workSheet4T.Cells[i, k].Text)) + 1;
                            //формула
                            workSheet4T.Cells[i, k].NumberFormat = "0"; //данные приведём к правильному виду

                            pB2 = Poloska(pB2);                         //заполняем полоску
                            progressBar2.Value = pB2;                   //присваиваем полоску
                        }

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }

                    label2.Text          = "Выводим средние баллы в топах";
                    oRange               = workSheet4T.Range["C" + (usedRowsNum + 2).ToString()];
                    oRange.Formula       = "=SUM(C$4:C$" + usedRowsNum.ToString() + ")/" + (usedRowsNum - 3).ToString();
                    oRange.FormulaHidden = false;

                    c2 = workSheet4T.Cells[usedRowsNum + 2, 3];
                    workSheet4T.get_Range(c2, c2).Copy();
                    j = 4;
                    while (j < kCount + 3)
                    {
                        workSheet4T.Cells[usedRowsNum + 2, j].PasteSpecial();
                        j++;

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }

                    oRange               = workSheet3T.Range["C" + (usedRowsNum + 2).ToString()];
                    oRange.Formula       = "=SUM(C$4:C$" + usedRowsNum.ToString() + ")/" + (usedRowsNum - 3).ToString();
                    oRange.FormulaHidden = false;


                    c2 = workSheet3T.Cells[usedRowsNum + 2, 3];
                    workSheet3T.get_Range(c2, c2).Copy();
                    j = 4;
                    while (j < vCount + 3)
                    {
                        workSheet3T.Cells[usedRowsNum + 2, j].PasteSpecial();
                        j++;

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }

                    pB2 = Poloska(pB2);       //заполняем полоску
                    progressBar2.Value = pB2; //присваиваем полоску

                    progressBar1.Value = 90;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);

                    label2.Text = "Составляем графики для среднего образования";
                    int j1 = 200;
                    int i1 = kCount * 55 + 300;
                    workSheet4.Columns.AutoFit();
                    workSheet3.Columns.AutoFit();
                    Excel.ChartObjects chartsobjrcts = (Excel.ChartObjects)workSheet4.ChartObjects(Type.Missing);
                    for (j = 4; j <= usedRowsNum; j++)
                    {
                        Excel.ChartObject chartsobjrct = chartsobjrcts.Add(i1, j1, 600, 350);
                        c1 = workSheet4.Cells[j, 3];
                        c2 = workSheet4.Cells[j, kCount + 2];
                        c3 = workSheet4.get_Range(c1, c2);

                        chartsobjrct.Chart.ChartWizard(c3,
                                                       Excel.XlChartType.xlColumnStacked, 2, Excel.XlRowCol.xlRows, Type.Missing,
                                                       0, false, workSheet4.Cells[j, 1], "Колледж", "Значение", Type.Missing);
                        j1 += 350;

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    j1            = 100;
                    i1            = vCount * 200 + 300;
                    label2.Text   = "Составляем графики для высшего образования";
                    chartsobjrcts =
                        (Excel.ChartObjects)workSheet3.ChartObjects(Type.Missing);
                    for (j = 4; j <= usedRowsNum; j++)
                    {
                        Excel.ChartObject chartsobjrct = chartsobjrcts.Add(i1, j1, 600, 350);
                        c1 = workSheet3.Cells[j, 3];
                        c2 = workSheet3.Cells[j, vCount + 2];
                        c3 = workSheet3.get_Range(c1, c2);
                        //
                        chartsobjrct.Chart.ChartWizard(c3,
                                                       Excel.XlChartType.xlColumnStacked, 2, Excel.XlRowCol.xlRows, Type.Missing,
                                                       0, false, workSheet3.Cells[j, 1], "Вуз", "Значение", Type.Missing);

                        j1 += 350;

                        pB2 = Poloska(pB2);       //заполняем полоску
                        progressBar2.Value = pB2; //присваиваем полоску
                    }
                    //
                    label2.Text    = "Приводим ячейки в правильный вид";
                    c1             = workSheet3.Cells[2, 1];
                    c2             = workSheet3.Cells[2, vCount + 3];
                    c3             = workSheet3.get_Range(c1, c2);
                    c3.ColumnWidth = 30;
                    c3.RowHeight   = 90;

                    c1             = workSheet3T.Cells[2, 1];
                    c2             = workSheet3T.Cells[2, vCount + 3];
                    c3             = workSheet3T.get_Range(c1, c2);
                    c3.ColumnWidth = 30;
                    c3.RowHeight   = 90;

                    c1             = workSheet4.Cells[2, 1];
                    c2             = workSheet4.Cells[2, kCount + 3];
                    c3             = workSheet4.get_Range(c1, c2);
                    c3.ColumnWidth = 30;
                    c3.RowHeight   = 90;

                    c1             = workSheet4T.Cells[2, 1];
                    c2             = workSheet4T.Cells[2, kCount + 3];
                    c3             = workSheet4T.get_Range(c1, c2);
                    c3.ColumnWidth = 30;
                    c3.RowHeight   = 90;

                    //вставим колонку с названиями в вузы если флоаг не тру

                    if (flag == false)
                    {
                        c1 = workSheet3.Cells[1, 1];
                        c2 = workSheet3.Cells[usedRowsNum, 1];
                        workSheet3.get_Range(c1, c2).Copy();
                        workSheet3.Cells[1, vCount + 3].PasteSpecial();
                        workSheet3T.Cells[1, vCount + 3].PasteSpecial();
                    }

                    pB2 = Poloska(pB2);       //заполняем полоску
                    progressBar2.Value = pB2; //присваиваем полоску

                    progressBar1.Value = 100;
                    taskbar.SetProgressValue(progressBar1.Value, progressBar1.Maximum);
                    label2.Text = "Открываем созданный файл";
                    // Открываем созданный excel-файл
                    ex.Visible     = true;
                    ex.UserControl = true;

                    Marshal.ReleaseComObject(workSheet);
                    Marshal.ReleaseComObject(workSheet1);
                    Marshal.ReleaseComObject(workSheetT);
                    Marshal.ReleaseComObject(workSheet3);
                    Marshal.ReleaseComObject(workSheet3T);
                    Marshal.ReleaseComObject(workSheet4);
                    Marshal.ReleaseComObject(workSheet4T);
                    Marshal.ReleaseComObject(workSheet2);
                    //Marshal.ReleaseComObject(workBook);
                    Marshal.ReleaseComObject(ex);
                    label2.Text = "Освобождаем память компьютера";
                    if (checkBox1.Checked)
                    {
                        workBook.Close(false);
                    }
                    //workBook.Close(false);
                    Application.Exit();
                    //ex.Quit();
                }
            }
        }
Пример #5
0
        public void Excele()
        {
            DB();
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbook    workBook;
            Excel.Worksheet   workSheet;

            workBook       = excelApp.Workbooks.Add(System.Reflection.Missing.Value);
            workSheet      = (Excel.Worksheet)workBook.Worksheets.get_Item(1);
            workSheet.Name = "Рейтинг" + sotr;

            workSheet.Cells[1]    = "Фамилия сотрудника";
            workSheet.Cells[2]    = "Дата оценки рейтинга";
            workSheet.Cells[3]    = "Критерии оценки";
            workSheet.Cells[4]    = "Вес критерия";
            workSheet.Cells[5]    = "Личные показатели";
            workSheet.Cells[6]    = "Результат";
            workSheet.Cells[2, 1] = sotr;
            workSheet.Cells[2, 2] = DateTime.Now.ToString("yyyy-MM-dd");
            try
            {
                for (int j = 0; j < tabl.Rows.Count; j++)
                {
                    workSheet.Cells[j + 2, 3] = tabl.Rows[j].Field <string>(1).ToString();
                    workSheet.Cells[j + 2, 4] = tabl.Rows[j].Field <int>(2).ToString();
                    workSheet.Cells[j + 2, 5] = lnums[j];
                    if (workSheet.Cells[j + 2, 5].Text == "0" || workSheet.Cells[j + 2, 5].Text == " ")
                    {
                        Microsoft.Office.Interop.Excel.Range cel = (Excel.Range)workSheet.Rows[j + 2];
                        cel.EntireRow.Delete(Type.Missing);
                    }
                }
                workSheet.Cells[2, 6] = Convert.ToDouble(FINALOCHKA.ToString("0.00"));
            }
            catch
            {
            }

            try
            {
                for (int i = 1; i < tabl.Rows.Count; i++)
                {
                    if (workSheet.Cells[i, 5].text == "")
                    {
                        workSheet.Range[$"C{i}", $"E{i}"].Rows.Delete(Type.Missing);
                    }
                }
            }
            catch
            { }

            var excelcells = workSheet.get_Range("E2", "E10");

            excelcells.Select();
            Excel.Chart excelchart = (Excel.Chart)excelApp.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            excelchart.Activate();
            excelchart.Select(Type.Missing);
            excelApp.ActiveChart.ChartType = Excel.XlChartType.xlPie;
            excelApp.ActiveChart.HasTitle  = true;
            excelApp.ActiveChart.ChartTitle.Text
                = "Рейтинг сотрудника";
            excelApp.ActiveChart.FullSeriesCollection(1).XValues = "=Рейтинг" + sotr + "!$C$2:$C$10";

            excelApp.ActiveChart.HasLegend = true;
            excelApp.ActiveChart.Legend.Position
                = Excel.XlLegendPosition.xlLegendPositionBottom;
            excelApp.ActiveChart.Location(Excel.XlChartLocation.xlLocationAsObject, workSheet.Name);
            var excelsheets = workBook.Worksheets;

            workSheet = (Excel.Worksheet)excelsheets.get_Item(1);
            workSheet.Shapes.Item(1).IncrementLeft(-201);
            workSheet.Shapes.Item(1).IncrementTop((float)20.5);
            workSheet.Shapes.Item(1).Height = 350;
            workSheet.Shapes.Item(1).Width  = 300;

            workSheet.Columns.AutoFit();
            excelApp.Visible     = true;
            excelApp.UserControl = true;
        } // Формирование Excel отчета