(说明:年前为准备一个有关图表的项目写在一个临时博客上,现转移到这里)
继续研究图表,看来看去,感觉还是owc比较合适,更底层点儿的东西操作起来也会更灵活一些,更先进一些的控件可能在使用的时候会方便不少,但应对一些特殊的要求往往会更让人伤脑筋。所以,还是用owc算了。
一、owc的位置
该控件是office提供,可在以下位置找到:%system%/Program Files/Common Files/Microsoft Shared/Web Components/11,相对office2003 ,其中有个owc11.dll的就是,当然,这是一个com组件,在部署到服务器时会麻烦点,应该需要在服务器上安装。记得我在浏览这个文件夹时,不小心把web componets移动了一个位置,结果就造成程序的错误。在其中的2052文件夹下,有该控件的帮助文档,可以做为参考。
二、基本用法
首先当然是引用该组件。代码页顶部需要申明using OWC= Microsoft.Office.Interop.Owc11;OWC这个别名可以方便程序的使用。在使用时,先创建一个ChartSpace对象,然后在其中添加一个CHChart对象,如下:
OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();
OWC.ChChart objChart = objCSpace.Charts.Add(0);
下一步就是往CHChart图表对象中添加Series系列对象了。所谓Seires就是具体的图形了,如柱形图、饼图之类的。CHChart对象有个SeriesCollection属性,是CHChart对象中所有系列的集合,最多可包含256个系列。SeriesCollection有个 Add方法,可用来往集合中添加Series系列。添加了系列后,可以用其SetData方法为该系列指定名称、属性、值了。例如:
//添加一个series
objChart.SeriesCollection.Add(0);
objChart.SeriesCollection[0].Type = OWC.ChartChartTypeEnum.chChartTypeColumnClustered;
//给定series的名字
objChart.SeriesCollection[0].SetData(OWC.ChartDimensionsEnum.chDimSeriesNames,
+(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
//给定属性
objChart.SeriesCollection[0].SetData(OWC.ChartDimensionsEnum.chDimCategories,
+(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);
//给定objChart[0]的值
OWC.ChSeries sDispDppm = objChart.SeriesCollection[0];
sDispDppm.SetData
(OWC.ChartDimensionsEnum.chDimValues,
(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);
三、用Ungroup方法生成双轴图表
CHSeries对象有个Ungroup方法,唯一的参数是逻辑型的,指示该系列是否采用与前一层次不同的刻度。默认为false,而 Ungroup(true)则会采用不同的刻度。当然,你需要为图表对象增加一个刻度,并设置相应的刻度,CHChart对象下有个Axes属性,用来返回图表的ChAxes轴集合,其有个Add方法,用来添加新的轴ChAxis对象。例如:
OWC.ChSeries sDispLar = objChart.SeriesCollection.Add(0);
sDispLar.Ungroup(true);
OWC.ChAxis MyAxis = objChart.Axes.Add(sDispLar.get_Scalings(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues));
MyAxis.Position = OWC.ChartAxisPositionEnum.chAxisPositionRight;
MyAxis.HasMinorGridlines = false;
MyAxis.NumberFormat = "0.00%";
MyAxis.HasTitle = true;
MyAxis.Title.Caption = "报废率(%)";
该系列名称、属性、值的设置方法和前面一样。
更多用法和技巧待日后使用中再做总结。