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; }
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; }
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(); } }
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(); } } }
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 отчета