c#生成Excel饼图、柱状图

c#生成Excel饼图、柱状图

效果图

 

 
  1. using Excel = Microsoft.Office.Interop.Excel;

  2.  
  3. namespace PrintProject.ChuangKou

  4. {

  5. public partial class Chart

  6. {

  7.  
  8. List<string> txDataPie = new List<string>() { "不合格", "合格" };

  9. List<int> tyDataPie=new List<string>() {826,185};

  10. List<string> txDataColumn=new List<string>() {"AAA","BBB","CCC"};

  11. List<int> tyDataNo=new List<string>() {0,0,641};

  12. List<int> tyDataOk=new List<string>() {0,0,185};

  13.  
  14. private void btn_out_Click(object sender, EventArgs e)

  15. {

  16. //申明保存对话框

  17. SaveFileDialog dlg = new SaveFileDialog();

  18. //默然文件后缀

  19. dlg.DefaultExt = "xls ";

  20. //文件后缀列表

  21. dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";

  22. //默然路径是系统当前路径

  23. dlg.InitialDirectory = System.IO.Directory.GetCurrentDirectory();

  24. //打开保存对话框

  25. if (dlg.ShowDialog() == DialogResult.Cancel) return;

  26. //返回文件路径

  27. string fileNameString = dlg.FileName;

  28. //验证strFileName是否为空或值无效

  29. if (fileNameString.Trim() == " ")

  30. { return; }

  31. Excel.Application objExcel = null;

  32. Excel.Workbook objWorkbook = null;

  33. Excel.Worksheet objsheet = null;

  34. try

  35. {

  36. //申明对象

  37. objExcel = new Excel.Application();

  38. objWorkbook = objExcel.Workbooks.Add(Missing.Value);

  39. objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;

  40. //合格率

  41. objExcel.Cells[1, 1] = "开始时间";

  42. objExcel.Cells[1,2] = dateTimePicker2.Text;

  43. objExcel.Cells[1, 3] = "结束时间";

  44. objExcel.Cells[1,4] = dateTimePicker2.Text;

  45. objExcel.Cells[2, 1] = "不合格";

  46. objExcel.Cells[3, 1] = "合格";

  47. objExcel.Cells[2,2] = tyDataPie[0];

  48. objExcel.Cells[3,2] = tyDataPie[1];

  49. //饼图

  50. Excel.Range oResizeRange;

  51. Excel.Chart xlChart = (Excel.Chart)objWorkbook.Charts.Add(Type.Missing, objsheet, Type.Missing, Type.Missing);

  52. xlChart.ChartType= Excel.XlChartType.xlPie;//设置图形

  53. xlChart.SetSourceData(objsheet.get_Range("A2", "B3"),Excel.XlRowCol.xlColumns);

  54. objWorkbook.ActiveChart.Location(Excel.XlChartLocation.xlLocationAutomatic, "合格率");

  55. objWorkbook.ActiveChart.Location(Excel.XlChartLocation.xlLocationAsObject, objsheet.Name);

  56. oResizeRange = (Excel.Range)objsheet.Rows.get_Item(7, Missing.Value);

  57.  
  58. objsheet.Shapes.Item("Chart 1").Top = 70; //调图表的位置上边距

  59. objsheet.Shapes.Item("Chart 1").Left = (float)(double)oResizeRange.Left;

  60. objsheet.Shapes.Item("Chart 1").Width = 200; //调图表的宽度

  61. objsheet.Shapes.Item("Chart 1").Height = 150; //调图表的高度

  62. #region 管理人员

  63. int col = 6;

  64. objExcel.Cells[2, col] = "用户名";

  65. objExcel.Cells[2, col+1] = "合格";

  66. objExcel.Cells[2, col + 2] = "不合格";

  67. int row = 3;

  68. for (int i=0;i< txDataColumn.Count;i++) {

  69. objExcel.Cells[row, col] = txDataColumn[i];

  70. row++;

  71. }

  72. row = 3;

  73. for (int i = 0; i < tyDataOk.Count; i++)

  74. {

  75. objExcel.Cells[row, col+1] = tyDataOk[i];

  76. row++;

  77. }

  78. row = 3;

  79. for (int i = 0; i < tyDataNo.Count; i++)

  80. {

  81. objExcel.Cells[row, col + 2] = tyDataNo[i];

  82. row++;

  83. }

  84. #endregion

  85. //柱状图

  86. Excel.Chart xlChart2 = (Excel.Chart)objWorkbook.Charts.Add(Type.Missing, objsheet, Type.Missing, Type.Missing);

  87. Excel.Range cellRange = objsheet.get_Range((Excel.Range)objsheet.Cells[2, 6], (Excel.Range)objsheet.Cells[3 + txDataColumn.Count - 1, 8]);

  88. //1-cellRange:数据源的范围,2-图表类型,3-Type.Missing,4-在图表上将列或行用作数据系列的方式,5、6-第五个第六个参数设置图表的x轴和y轴分别是数据源的哪些列/行,7-图表是否有图例,8、9、10-设置标题

  89. xlChart2.ChartWizard(cellRange,

  90. Excel.XlChartType.xlColumnStacked, Type.Missing,

  91. Excel.XlRowCol.xlColumns, 1, 1, true,

  92. "管理人员校准情况", "用户名", "校准个数",

  93. "");

  94. xlChart2.Location(Excel.XlChartLocation.xlLocationAsObject, objsheet.Name);

  95. Excel.Range oResizeRange1 = (Excel.Range)objsheet.Rows.get_Item(1);

  96. Excel.Range oResizeRange2 = (Excel.Range)objsheet.Columns.get_Item(10);

  97. objsheet.Shapes.Item("Chart 2").Top = oResizeRange1.Top; //调图表的位置上边距--1行的高度

  98. objsheet.Shapes.Item("Chart 2").Left = (float)(double)oResizeRange2.Left;//调图表的位置左边距--10列的宽度

  99. objsheet.Shapes.Item("Chart 2").Width = 300; //调图表的宽度

  100. objsheet.Shapes.Item("Chart 2").Height = 200; //调图表的高度

  101. //保存文件

  102. objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,

  103. Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,

  104. Missing.Value, Missing.Value);

  105. }

  106. catch (Exception error)

  107. {

  108. MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);

  109. return;

  110. }

  111. finally

  112. {

  113. //关闭Excel应用

  114. if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);

  115. if (objExcel.Workbooks != null) objExcel.Workbooks.Close();

  116. if (objExcel != null) objExcel.Quit();

  117. objsheet = null;

  118. objWorkbook = null;

  119. objExcel = null;

  120. }

  121. }

  122. }

  123. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值