Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.29 KB | None | 0 0
  1. //Массив создается
  2. arr = new object[Data.Rows.Count + 2, Data.Columns.Count];
  3. int indexRow = 1;
  4. int headerNameRow = 0;
  5. int index = 1;
  6. //Установка заголовков стобцов в массиве
  7. for (int columnIndex = 0; columnIndex < dataGridView1.Columns.Count; columnIndex++)
  8. {
  9. DataGridViewColumn gridColumn = dataGridView1.Columns[columnIndex];
  10. arr[headerNameRow, columnIndex] = dataGridView1.Columns[columnIndex].HeaderText;
  11. arr[indexRow, columnIndex] = index;
  12. index++;
  13. }
  14. //Заполнение массива данными из Data
  15. for (int r = 0; r < Data.Rows.Count; r++)
  16. {
  17. DataRow dr = Data.Rows[r];
  18. for (int c = 0; c < Data.Columns.Count; c++)
  19. {
  20. arr[r + 2, c] = dr[c];
  21. }
  22. }
  23. //Приступаем к созданию файла Excel
  24. string Sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
  25. dynamic excel = Microsoft.VisualBasic.Interaction.CreateObject("Excel.Application", string.Empty);
  26. excel.ScreenUpdating = false;
  27. dynamic workbook = excel.workbooks;
  28. workbook.Add();
  29. dynamic worksheet = excel.ActiveSheet;
  30. const int left = 1;
  31. const int top = 1;
  32. int height = arr.GetLength(0);
  33. int width = arr.GetLength(1);
  34. int bottom = top + height - 1;
  35. int right = left + width - 1;
  36. dynamic rg = worksheet.Range[worksheet.Cells[top, left], worksheet.Cells[bottom, right]];
  37.  
  38. // Перенос текста в ячейках
  39. rg.Cells.WrapText = true;
  40.  
  41. // Заполняем данными из массива Excel таблицу
  42. rg.Value = arr;
  43.  
  44. // Задали сетку в таблице
  45. for (int i = 1; i <= 4; i++)
  46. {
  47. rg.Borders[i].LineStyle = 1;
  48. }
  49. //Определение размеров столбцов
  50. rg.Columns(1).ColumnWidth = 10;
  51.  
  52. // Цикл по столбцам таблицы
  53. for (int i = 0; i < dataGridView1.Columns.Count; i++)
  54. {
  55.  
  56. rg.Columns(i + 1).ColumnWidth = 30;
  57.  
  58. // Если тип столбца integer, то
  59. if ( worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdCostsResultTask" ||
  60. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdParagraph" ||
  61. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ExportIdListEdu" ||
  62. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdListEdu" ||
  63. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "UslugaID" ||
  64. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecClassifID" ||
  65. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecID" ||
  66. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecCostGroupID" ||
  67. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FormEduID" ||
  68. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentTypeID" ||
  69. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentCategoryID" ||
  70. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentPeriodID" ||
  71. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentDataID" ||
  72. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IsInz" ||
  73. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecUslugaID" ||
  74. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "NormativeType" ||
  75. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "repUnit2016" ||
  76. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecClassifName" ||
  77. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FormEduName" ||
  78. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentTypeName" ||
  79. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentCategoryName" ||
  80. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ContingentPeriodName" ||
  81. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Region.Name" ||
  82. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Paragraph.Kod" ||
  83. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Paragraph.Name" ||
  84. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Region.Name" ||
  85. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ListEdu.LongName" ||
  86. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "mfName" ||
  87. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "SpecName" ||
  88. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "IdRegion" ||
  89. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Paragraph.Kod")
  90.  
  91. {
  92. // Горизонтальное выравнивание ячеек столбца по центру
  93. worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).HorizontalAlignment = -4108;
  94. }
  95.  
  96. if (worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "Cont" ||
  97. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "ReducedCont"
  98. )
  99. {
  100. // Горизонтальное выравнивание ячеек столбца по центру
  101. worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).HorizontalAlignment = -4108;
  102.  
  103. // Вставили формулу в итоговые ячейки агрегируемых столбцов
  104. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].FormulaLocal = "=СУММ(" + Utilities.ConverterToChar(i + 1) + "3:" + Utilities.ConverterToChar(i + 1) + "" + Convert.ToString(bottom) + ")";
  105.  
  106. // Форматный вывод в ячейки столбца
  107. worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).NumberFormat = "### ##0";
  108.  
  109. // Форматный вывод в ячейку суммы "Объем услуги"
  110. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].NumberFormat = "### ##0";
  111.  
  112. // Жирный шрифт в итоговых ячейках агрегированных столбцов
  113. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Font.Bold = true;
  114.  
  115. // Рамку в итоговые ячейки агрег. столбцов
  116. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Borders.LineStyle = 1;
  117.  
  118. // Горизонтальное выравнивания ячейки суммы "Объем услуги" по правому краю
  119. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].HorizontalAlignment = -4152;
  120.  
  121. // Вертикальное выравнивание ячейки суммы "Объем услуги" по центру
  122. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].VerticalAlignment = -4108;
  123. }
  124.  
  125. if (
  126. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FinalValue" ||
  127. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "alignment_finalvalue" ||
  128. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "BaseNorm" ||
  129. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "FinalNorm" ||
  130. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "alignmentcoeff" ||
  131. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "lbocoeff" ||
  132. worksheet.Cells[Convert.ToString(top), i + 1].Value.ToString() == "lbo_finalvalue")
  133. {
  134. // Форматный вывод в ячейки столбца
  135. worksheet.Range(Utilities.ConverterToChar(i + 1) + ":" + Utilities.ConverterToChar(i + 1)).NumberFormat = "### ##0" + Sep + "0";
  136. // Форматный вывод в ячейку суммы "Контингент" и "Субсидия на ГЗ"
  137. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].NumberFormat = "### ##0" + Sep + "0";
  138.  
  139. // Вставили формулу в итоговые ячейки агрегируемых столбцов
  140. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].FormulaLocal = "=СУММ(" + Utilities.ConverterToChar(i + 1) + "3:" + Utilities.ConverterToChar(i + 1) + "" + Convert.ToString(bottom) + ")";
  141.  
  142. // Жирный шрифт в итоговых ячейках агрегированных столбцов
  143. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Font.Bold = true;
  144.  
  145. // Рамку в итоговые ячейки агрег. столбцов
  146. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].Borders.LineStyle = 1;
  147.  
  148. // Горизонтальное выравнивания ячейки суммы "Объем услуги" по правому краю
  149. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].HorizontalAlignment = -4152;
  150.  
  151. // Вертикальное выравнивание ячейки суммы "Объем услуги" по центру
  152. worksheet.Cells[Convert.ToString(bottom + 1), i + 1].VerticalAlignment = -4108;
  153. }
  154. }
  155.  
  156. // Вертикальное выравнивание по центру области rg
  157. rg.Cells.VerticalAlignment = -4108;
  158.  
  159. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  160. // Блок вставки и обработки слова "Итого"
  161.  
  162. // Вставляем текст в ячейку (первый номер - строка, второй - столбец)
  163. worksheet.Cells[Convert.ToString(bottom + 1), "A"] = "ИТОГО:";
  164. // Выравнивания ячейки по правому краю
  165. worksheet.Range("A" + Convert.ToString(bottom + 1)).HorizontalAlignment = -4152; // По левому было бы -4131
  166. // Жирный шрифт в ячейке
  167. worksheet.Range("A" + Convert.ToString(bottom + 1)).Font.Bold = true;
  168. // Рамка в ячейке
  169. worksheet.Range("A" + Convert.ToString(bottom + 1)).Borders.LineStyle = 1;
  170.  
  171. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  172.  
  173. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  174. // Обработка заголовка таблицы
  175.  
  176. // Заголовок таблицы
  177. dynamic rgHeader = worksheet.Range[worksheet.Cells[top, left], worksheet.Cells[top + 1, right]];
  178.  
  179. // Перенос текста в заговке
  180. rgHeader.Cells.WrapText = true;
  181.  
  182. // Горизонтальное выравнивание текста в заголовке по центру
  183. rgHeader.Cells.HorizontalAlignment = -4108;
  184.  
  185. // Шрифт Bolt
  186. rgHeader.Font.Bold = true;
  187. rgHeader.Font.Size = 10;
  188.  
  189. // Цвет заливки
  190. rgHeader.Interior.Color = 189 * (int)Math.Pow(16, 4) + 129 * (int)Math.Pow(16, 2) + 78; // #4E81BD
  191.  
  192. // Форматный вывод во вторую строку заголовка таблицы
  193. rgHeader.NumberFormat = "0";
  194.  
  195. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  196.  
  197. // Применили изменения и показали Excel
  198. excel.ScreenUpdating = true;
  199. excel.Visible = true;
  200.  
  201. // Очистили ресурсы.
  202. Marshal.ReleaseComObject(rg);
  203. Marshal.ReleaseComObject(rgHeader);
  204. Marshal.ReleaseComObject(worksheet);
  205. Marshal.ReleaseComObject(workbook);
  206. Marshal.ReleaseComObject(excel);
  207. arr = null;
  208. return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement