您的位置:首页 > 其它

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

2012-10-31 10:28 441 查看
首先看下生成的效果图(即使没有安装Excel也能生成这样的图表)。



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

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

/// <summary>
///这个类型描述如何生成合并的图表。
/// </summary>
public void CreateCombinationChart()
{
//创建一个工作薄对象。
IWorkbook workbook = ExcelxApplication.CreateWorkbook();
//获取工作表集合中指定索引的工作表对象。
IWorksheet worksheet = workbook.Worksheets[0];

//创建DataTable对象。
DataTable dt = new DataTable();
//向DataTable对象中添加列对象。
dt.Columns.Add("Employee Name");
dt.Columns.Add("Salary", typeof(int));
dt.Columns.Add("Other", typeof(int));
dt.Columns.Add("Total", typeof(int));

//为DataTable对象添加多行。
dt.Rows.Add(new object[4] { "Nelson", 40000, 20000, 60000 });
dt.Rows.Add(new object[4] { "Young", 55500, 25000,  80500});
dt.Rows.Add(new object[4] { "Lambert", 25000, 10000, 35000 });
dt.Rows.Add(new object[4] { "Johnson", 25050, 12000,  37050});
dt.Rows.Add(new object[4] { "Lee", 45332, 23000, 68332 });

//导入该DataTable对象的数据到工作表对象中指定的位置。
worksheet.ImportDataTable(dt, true, "A1");

//获取工作表中所有图表对象。
IChartCollection charts = worksheet.Charts;

//获取新添加的图表对象(其中指定要添加的图表类型和在工作表中的位置范围)。
IChart chart = charts.Add(ChartType.ColumnStacked100, 0, 4, 17, 12);

//创建指定的单元格区域。
IRange range = worksheet.Cells.CreateRange("A1:D6");

//为新创建的图表设置数据源。
chart.SetSourceData(range, RowCol.Columns);

//获取图表的区域(包含图表的标题,图例等)。
IChartArea chartAea = chart.ChartArea;
//设置该图表区域的字体名称。
chartAea.Font.Name = "Verdana";
//设置该图表区域的字体大小。
chartAea.Font.Size = 11;

//获取图表实际的占用的区域。
IPlotArea plotArea = chart.PlotArea;
//隐藏该区域的边框线。
plotArea.Border.Visible = false;
//设置该区域无填充。
plotArea.Area.Formatting = Acey.ExcelX.Drawing.FormattingType.None;

//获取图表的标题。
IChartTitle title = chart.ChartTitle;
//设置图表标题显示文本。
title.Text = "Employee Salary";
//设置图表标题的字体是否为粗体。
title.Font.Bold = true;
//设置图表标题的字体大小。
title.Font.Size = 12;

//获取图表的图例对象。
ILegend legend = chart.Legend;
//设置该图例对象的位置。
legend.Position = LegendPositionType.Top;
//隐藏该图例的边框线。
legend.Border.Visible = false;

//获取图表的Y坐标轴。
IValueAxis valueAxis = chart.ValueAxis;
//隐藏图表Y坐标轴的网格线。
valueAxis.MajorGridlines.Visible = false;
//设置图表Y坐标轴的主要刻度位置。
valueAxis.MajorTickMark = TickMarkType.Outside;

//获取图表的第二Y坐标轴。
valueAxis = chart.SecondValueAxis;
//设置图表第二Y坐标轴的主要刻度位置。
valueAxis.MajorTickMark = TickMarkType.Outside;

//获取该图表所有系列对象。
ISeriesCollection seriesCollection = chart.SeriesCollection;
//获取集合中指定索引处的系列对象。
ISeries series = seriesCollection[0];
//设置该系列对象的填充前景色。
series.Area.ForegroundColor = System.Drawing.Color.Orange;

//获取集合中指定索引处的系列对象。
series = seriesCollection[1];
//设置该系列对象的填充前景色。
series.Area.ForegroundColor = System.Drawing.Color.Red;

//获取集合中指定索引处的系列对象。
series = seriesCollection[2];
//设置该系列的类型。
series.Type = ChartType.Line;
//将该系列平铺在第二Y坐标轴。
series.PlotOnSecondAxis = true;
//设置该系列的边框样式。
series.Border.Color = System.Drawing.Color.Yellow;
series.Border.Weight = Acey.ExcelX.Drawing.WeightType.WideLine;

//获取该系列对象的标记。
IDataLabels dataLabels = series.DataLabels;
//表明是否显示值在该标记中。
dataLabels.ShowValue = true;
//设置该标记显示。
dataLabels.Border.Visible = true;
//设置该标记的填充为自动方式。
dataLabels.Area.Formatting = Acey.ExcelX.Drawing.FormattingType.Automatic;
//设置该标记在系列中显示的位置。
dataLabels.Position = LabelPositionType.Center;

//为该工作薄保存指定的文件格式。
workbook.SaveAs(@"D:\book.xls", FileFormat.Excel97To2003);
}


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

三、总结

无需安装微软Excel,用代码也能很轻松实现单元格格式效果。 下载最新版本到www.aceyoffice.com。如果您想对Acey.ExcelX有进一步了解,在网站下载帮助和Demo。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: