经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C# EPPlus导出EXCEL,并生成Chart表
来源:cnblogs  作者:永恒921  时间:2019/3/6 9:23:10  对本文有异议

一  在negut添加EPPlus.dll库文件。

之前有写过直接只用Microsoft.Office.Interop.Excel 导出EXCEL,并生成Chart表,非常耗时,所以找了个EPPlus控件。

 

 

二 代码部分

  1. System.Data.DataTable dt = new System.Data.DataTable();
  2. dt.Columns.Add("序号", typeof(int));
  3. dt.Columns.Add("数据1", typeof(int));
  4. dt.Columns.Add("数据2", typeof(int));
  5. Random r = new Random();
  6. for (int i = 0; i < 20; i++)
  7. {
  8. if (i == 6 || i == 16) continue;
  9. dt.Rows.Add(i + 1, r.Next(50), r.Next(60));
  10. }
  11. ////新建一个 Excel 文件
  12. //string filePath = @"C:\Users\Lenovo\Desktop\" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";
  13. //FileStream fileStream = new FileStream(filePath, FileMode.Create);
  14.  
  15. ////加载这个 Excel 文件
  16. //ExcelPackage package = new ExcelPackage(fileStream);
  17.  
  18. //加载这个 Excel 文件
  19. ExcelPackage package = new ExcelPackage();
  20.  
  21. // 添加一个 sheet 表
  22. ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("数据");
  23. //添加个chart表
  24. ExcelWorksheet shapesheet = package.Workbook.Worksheets.Add("Chart");
  25. shapesheet.View.ShowGridLines = false;//去掉sheet的网格线
  26. shapesheet.Cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
  27. shapesheet.Cells.Style.Fill.BackgroundColor.SetColor(Color.SkyBlue);
  28.  
  29. //worksheet.View.ShowGridLines = false;//去掉sheet的网格线
  30.  
  31. #region 生成chart表
  32. ExcelChartSerie serie = null;
  33. ExcelChart chart = shapesheet.Drawings.AddChart("chart", eChartType.LineMarkers);
  34. //chart.Legend.Position = eLegendPosition.TopRight;
  35. chart.SetPosition(5, 5);
  36. chart.Legend.Add();
  37. chart.Title.Text = "测试";
  38. chart.ShowHiddenData = true;
  39. chart.SetSize(1000, 600);//设置图表大小
  40.  
  41. chart.XAxis.Title.Text = "CNC";
  42. chart.XAxis.Title.Font.Size = 10;
  43. chart.YAxis.Title.Text = "Value";
  44. chart.YAxis.Title.Font.Size = 10;
  45.  
  46. #endregion
  47.  
  48.  
  49. int rowIndex = 1; // 起始行为 1
  50. int colIndex = 1; // 起始列为 1
  51.  
  52. //设置列名
  53. for (int i = 0; i < dt.Columns.Count; i++)
  54. {
  55. worksheet.Cells[rowIndex, colIndex + i].Value = dt.Columns[i].ColumnName;
  56. //字体
  57. worksheet.Cells[rowIndex, colIndex + i].Style.Font.Name = "Arial";
  58. //字体加粗
  59. worksheet.Cells[rowIndex, colIndex + i].Style.Font.Bold = true;
  60. //字体大小
  61. worksheet.Cells[rowIndex, colIndex + i].Style.Font.Size = 12;
  62. //自动调整列宽,也可以指定最小宽度和最大宽度
  63. worksheet.Column(colIndex + i).AutoFit();
  64.  
  65. if (colIndex + i > 1)
  66. {
  67. serie = chart.Series.Add(worksheet.Cells[2, colIndex + i, dt.Rows.Count + 1, colIndex + i], worksheet.Cells[2, 1, dt.Rows.Count + 1, 1]);
  68. serie.HeaderAddress = worksheet.Cells[1, colIndex + i];
  69. }
  70. }
  71.  
  72. // 跳过第一列列名
  73. rowIndex++;
  74.  
  75. //写入数据
  76. for (int i = 0; i < dt.Rows.Count; i++)
  77. {
  78. for (int j = 0; j < dt.Columns.Count; j++)
  79. {
  80. //worksheet.Cells[rowIndex + i, colIndex + j].Style.Numberformat.Format = "0.00";
  81. worksheet.Cells[rowIndex + i, colIndex + j].Value = double.Parse(dt.Rows[i][j].ToString());
  82. }
  83.  
  84. //自动调整行高
  85. worksheet.Row(rowIndex + i).CustomHeight = true;
  86.  
  87. }
  88.  
  89. //添加chart数据,chart.Series.Add()方法所需参数为:chart.Series.Add(X轴数据区,Y轴数据区)
  90. //serie = chart.Series.Add(worksheet.Cells[2, 2, dt.Rows.Count + 1, 2], worksheet.Cells[2, 1, dt.Rows.Count + 1, 1]);
  91. //serie.HeaderAddress = worksheet.Cells[1, 2];
  92. //chartSerie = chart.Series.Add(worksheet.Cells[row + 1, 2, row + 1, 2 + dataPercent.Columns.Count - 2], worksheet.Cells["B1:M1"]);
  93. //chartSerie.HeaderAddress = worksheet.Cells[row + 1, 1];//设置每条线的名称
  94.  
  95.  
  96.  
  97. //垂直居中
  98. worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
  99. //水平居中
  100. worksheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
  101. //单元格是否自动换行
  102. worksheet.Cells.Style.WrapText = false;
  103. //单元格自动适应大小
  104. worksheet.Cells.Style.ShrinkToFit = true;
  105.  
  106. //合并单元格
  107. //worksheet.Cells[2, 1, 2, 2].Merge = true;
  108. //worksheet.Cells[int fromRow, fromCol, int toRow,int toCol].Merge = true;
  109.  
  110. //冻结首行(行号,列号)
  111. worksheet.View.FreezePanes(2, 1);
  112. ////冻结1-2列
  113. //worksheet.View.FreezePanes(1, 3);
  114.  
  115.  
  116.  
  117. //新建一个 Excel 文件
  118. string filePath = @"C:\Users\Lenovo\Desktop\" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";
  119. FileStream fileStream = new FileStream(filePath, FileMode.Create);
  120. package.SaveAs(fileStream);
  121.  
  122. //package.Save();
  123.  
  124. fileStream.Close();
  125. fileStream.Dispose();
  126.  
  127. worksheet.Dispose();
  128. package.Dispose();
  129. GC.Collect();

三 效果

 

原文链接:http://www.cnblogs.com/wangyonglai/p/10478576.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号