Excel生成报表之解决方案合并图表

首先看下生成的效果图(即使没有安装Excel也能生成这样的图表)。

其中这个图表中系列有柱状图也有线形图,如何能快速简单生成这样合并图表呢?

下面来看下为生成这样图表要编写的代码:

  1 /// <summary>
  2 ///这个类型描述如何生成合并的图表。
  3 /// </summary>
  4 public void CreateCombinationChart()
  5 {
  6    //创建一个工作薄对象。
  7    IWorkbook workbook = ExcelxApplication.CreateWorkbook();
  8    //获取工作表集合中指定索引的工作表对象。
  9    IWorksheet worksheet = workbook.Worksheets[0];
 10 
 11    //创建DataTable对象。
 12    DataTable dt = new DataTable();
 13    //向DataTable对象中添加列对象。
 14    dt.Columns.Add("Employee Name");
 15    dt.Columns.Add("Salary", typeof(int));
 16    dt.Columns.Add("Other", typeof(int));
 17    dt.Columns.Add("Total", typeof(int));
 18 
 19    //为DataTable对象添加多行。
 20    dt.Rows.Add(new object[4] { "Nelson", 40000, 20000, 60000 });
 21    dt.Rows.Add(new object[4] { "Young", 55500, 25000,  80500});
 22    dt.Rows.Add(new object[4] { "Lambert", 25000, 10000, 35000 });
 23    dt.Rows.Add(new object[4] { "Johnson", 25050, 12000,  37050});
 24    dt.Rows.Add(new object[4] { "Lee", 45332, 23000, 68332 });
 25 
 26     //导入该DataTable对象的数据到工作表对象中指定的位置。
 27     worksheet.ImportDataTable(dt, true, "A1");
 28 
 29     //获取工作表中所有图表对象。
 30     IChartCollection charts = worksheet.Charts;
 31 
 32     //获取新添加的图表对象(其中指定要添加的图表类型和在工作表中的位置范围)。
 33     IChart chart = charts.Add(ChartType.ColumnStacked100, 0, 4, 17, 12);
 34 
 35     //创建指定的单元格区域。
 36     IRange range = worksheet.Cells.CreateRange("A1:D6");
 37 
 38     //为新创建的图表设置数据源。
 39     chart.SetSourceData(range, RowCol.Columns);            
 40 
 41     //获取图表的区域(包含图表的标题,图例等)。
 42     IChartArea chartAea = chart.ChartArea;
 43     //设置该图表区域的字体名称。
 44     chartAea.Font.Name = "Verdana";
 45     //设置该图表区域的字体大小。
 46     chartAea.Font.Size = 11;
 47 
 48     //获取图表实际的占用的区域。
 49     IPlotArea plotArea = chart.PlotArea;
 50     //隐藏该区域的边框线。
 51     plotArea.Border.Visible = false;
 52     //设置该区域无填充。
 53     plotArea.Area.Formatting = Acey.ExcelX.Drawing.FormattingType.None;
 54 
 55     //获取图表的标题。
 56     IChartTitle title = chart.ChartTitle;
 57     //设置图表标题显示文本。
 58     title.Text = "Employee Salary";
 59     //设置图表标题的字体是否为粗体。
 60     title.Font.Bold = true;
 61     //设置图表标题的字体大小。
 62     title.Font.Size = 12;
 63 
 64     //获取图表的图例对象。
 65     ILegend legend = chart.Legend;
 66     //设置该图例对象的位置。
 67     legend.Position = LegendPositionType.Top;
 68     //隐藏该图例的边框线。
 69     legend.Border.Visible = false;
 70 
 71      //获取图表的Y坐标轴。
 72      IValueAxis valueAxis = chart.ValueAxis;
 73      //隐藏图表Y坐标轴的网格线。
 74      valueAxis.MajorGridlines.Visible = false;
 75      //设置图表Y坐标轴的主要刻度位置。
 76      valueAxis.MajorTickMark = TickMarkType.Outside;
 77 
 78      //获取图表的第二Y坐标轴。
 79      valueAxis = chart.SecondValueAxis;
 80      //设置图表第二Y坐标轴的主要刻度位置。
 81      valueAxis.MajorTickMark = TickMarkType.Outside;
 82 
 83      //获取该图表所有系列对象。
 84      ISeriesCollection seriesCollection = chart.SeriesCollection;
 85      //获取集合中指定索引处的系列对象。
 86      ISeries series = seriesCollection[0];
 87      //设置该系列对象的填充前景色。
 88      series.Area.ForegroundColor = System.Drawing.Color.Orange;
 89 
 90      //获取集合中指定索引处的系列对象。
 91      series = seriesCollection[1];
 92      //设置该系列对象的填充前景色。
 93      series.Area.ForegroundColor = System.Drawing.Color.Red;
 94 
 95      //获取集合中指定索引处的系列对象。
 96      series = seriesCollection[2];
 97      //设置该系列的类型。
 98      series.Type = ChartType.Line;
 99      //将该系列平铺在第二Y坐标轴。
100      series.PlotOnSecondAxis = true;
101      //设置该系列的边框样式。
102      series.Border.Color = System.Drawing.Color.Yellow;
103      series.Border.Weight = Acey.ExcelX.Drawing.WeightType.WideLine;
104 
105      //获取该系列对象的标记。
106      IDataLabels dataLabels = series.DataLabels;
107      //表明是否显示值在该标记中。
108      dataLabels.ShowValue = true;
109      //设置该标记显示。
110      dataLabels.Border.Visible = true;
111      //设置该标记的填充为自动方式。
112      dataLabels.Area.Formatting = Acey.ExcelX.Drawing.FormattingType.Automatic;
113      //设置该标记在系列中显示的位置。
114      dataLabels.Position = LabelPositionType.Center;
115 
116      //为该工作薄保存指定的文件格式。
117      workbook.SaveAs(@"D:\book.xls", FileFormat.Excel97To2003);
118  }

只要不多的代码就能轻松高效地生成这样复杂的合并图表。

三、总结

无需安装微软Excel,用代码也能很轻松实现单元格格式效果。 下载最新版本到www.aceyoffice.com。如果您想对Acey.ExcelX有进一步了解,在网站下载帮助和Demo。

原文地址:https://www.cnblogs.com/happyfish78/p/2747606.html