首先看下生成的效果图(即使没有安装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。