Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Массив создается
- arr = new object[Data.Rows.Count + 2, Data.Columns.Count];
- int indexRow = 1;
- int headerNameRow = 0;
- int index = 1;
- //Установка заголовков стобцов в массиве
- for (int columnIndex = 0; columnIndex < dataGridView1.Columns.Count; columnIndex++)
- {
- DataGridViewColumn gridColumn = dataGridView1.Columns[columnIndex];
- arr[headerNameRow, columnIndex] = dataGridView1.Columns[columnIndex].HeaderText;
- arr[indexRow, columnIndex] = index;
- index++;
- }
- //Заполнение массива данными из Data
- for (int r = 0; r < Data.Rows.Count; r++)
- {
- DataRow dr = Data.Rows[r];
- for (int c = 0; c < Data.Columns.Count; c++)
- {
- arr[r + 2, c] = dr[c];
- }
- }
- //Приступаем к созданию файла Excel
- string Sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
- dynamic excel = Microsoft.VisualBasic.Interaction.CreateObject("Excel.Application", string.Empty);
- excel.ScreenUpdating = false;
- dynamic workbook = excel.workbooks;
- workbook.Add();
- dynamic worksheet = excel.ActiveSheet;
- const int left = 1;
- const int top = 1;
- int height = arr.GetLength(0);
- int width = arr.GetLength(1);
- int bottom = top + height - 1;
- int right = left + width - 1;
- dynamic rg = worksheet.Range[worksheet.Cells[top, left], worksheet.Cells[bottom, right]];
- // Перенос текста в ячейках
- rg.Cells.WrapText = true;
- // Заполняем данными из массива Excel таблицу
- rg.Value = arr;
- // Задали сетку в таблице
- for (int i = 1; i <= 4; i++)
- {
- rg.Borders[i].LineStyle = 1;
- }
- //Определение размеров столбцов
- rg.Columns(1).ColumnWidth = 10;
- // Цикл по столбцам таблицы
- for (int i = 0; i < dataGridView1.Columns.Count; i++)
- {
- rg.Columns(i + 1).ColumnWidth = 30;
- // Если тип столбца integer, то
- if ( worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdCostsResultTask" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdParagraph" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ExportIdListEdu" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdListEdu" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "UslugaID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecClassifID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecCostGroupID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FormEduID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentTypeID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentCategoryID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentPeriodID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentDataID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IsInz" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecUslugaID" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "NormativeType" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "repUnit2016" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecClassifName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FormEduName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentTypeName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentCategoryName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentPeriodName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Region.Name" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Paragraph.Kod" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Paragraph.Name" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Region.Name" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ListEdu.LongName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "mfName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecName" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdRegion" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Paragraph.Kod")
- {
- // Горизонтальное выравнивание ячеек столбца по центру
- worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).HorizontalAlignment = -4108;
- }
- if (worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Cont" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ReducedCont"
- )
- {
- // Горизонтальное выравнивание ячеек столбца по центру
- worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).HorizontalAlignment = -4108;
- // Вставили формулу в итоговые ячейки агрегируемых столбцов
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].FormulaLocal = "=СУММ(" + Utilities.ConverterToChar(i + 1) + "3:" + Utilities.ConverterToChar(i + 1) + "" + Convert.ToString(bottom) + ")";
- // Форматный вывод в ячейки столбца
- worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).NumberFormat = "### ##0";
- // Форматный вывод в ячейку суммы "Объем услуги"
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].NumberFormat = "### ##0";
- // Жирный шрифт в итоговых ячейках агрегированных столбцов
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Font.Bold = true;
- // Рамку в итоговые ячейки агрег. столбцов
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Borders.LineStyle = 1;
- // Горизонтальное выравнивания ячейки суммы "Объем услуги" по правому краю
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].HorizontalAlignment = -4152;
- // Вертикальное выравнивание ячейки суммы "Объем услуги" по центру
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].VerticalAlignment = -4108;
- }
- if (
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FinalValue" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "alignment_finalvalue" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "BaseNorm" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FinalNorm" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "alignmentcoeff" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "lbocoeff" ||
- worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "lbo_finalvalue")
- {
- // Форматный вывод в ячейки столбца
- worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).NumberFormat = "### ##0" + Sep + "0";
- // Форматный вывод в ячейку суммы "Контингент" и "Субсидия на ГЗ"
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].NumberFormat = "### ##0" + Sep + "0";
- // Вставили формулу в итоговые ячейки агрегируемых столбцов
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].FormulaLocal = "=СУММ(" + Utilities.ConverterToChar(i + 1) + "3:" + Utilities.ConverterToChar(i + 1) + "" + Convert.ToString(bottom) + ")";
- // Жирный шрифт в итоговых ячейках агрегированных столбцов
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Font.Bold = true;
- // Рамку в итоговые ячейки агрег. столбцов
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Borders.LineStyle = 1;
- // Горизонтальное выравнивания ячейки суммы "Объем услуги" по правому краю
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].HorizontalAlignment = -4152;
- // Вертикальное выравнивание ячейки суммы "Объем услуги" по центру
- worksheet.Cells[Convert.ToString(bottom + 1), i + 1].VerticalAlignment = -4108;
- }
- }
- // Вертикальное выравнивание по центру области rg
- rg.Cells.VerticalAlignment = -4108;
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Блок вставки и обработки слова "Итого"
- // Вставляем текст в ячейку (первый номер - строка, второй - столбец)
- worksheet.Cells[Convert.ToString(bottom + 1), "A"] = "ИТОГО:";
- // Выравнивания ячейки по правому краю
- worksheet.Range("A" + Convert.ToString(bottom + 1)).HorizontalAlignment = -4152; // По левому было бы -4131
- // Жирный шрифт в ячейке
- worksheet.Range("A" + Convert.ToString(bottom + 1)).Font.Bold = true;
- // Рамка в ячейке
- worksheet.Range("A" + Convert.ToString(bottom + 1)).Borders.LineStyle = 1;
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Обработка заголовка таблицы
- // Заголовок таблицы
- dynamic rgHeader = worksheet.Range[worksheet.Cells[top, left], worksheet.Cells[top + 1, right]];
- // Перенос текста в заговке
- rgHeader.Cells.WrapText = true;
- // Горизонтальное выравнивание текста в заголовке по центру
- rgHeader.Cells.HorizontalAlignment = -4108;
- // Шрифт Bolt
- rgHeader.Font.Bold = true;
- rgHeader.Font.Size = 10;
- // Цвет заливки
- rgHeader.Interior.Color = 189 * (int)Math.Pow(16, 4) + 129 * (int)Math.Pow(16, 2) + 78; // #4E81BD
- // Форматный вывод во вторую строку заголовка таблицы
- rgHeader.NumberFormat = "0";
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Применили изменения и показали Excel
- excel.ScreenUpdating = true;
- excel.Visible = true;
- // Очистили ресурсы.
- Marshal.ReleaseComObject(rg);
- Marshal.ReleaseComObject(rgHeader);
- Marshal.ReleaseComObject(worksheet);
- Marshal.ReleaseComObject(workbook);
- Marshal.ReleaseComObject(excel);
- arr = null;
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement