世外桃源

C#、Asp.net相关技术
posts - 25, comments - 26, trackbacks - 0, articles - 2

导航

OWC中双刻度图表的实现

Posted on 2006-05-24 23:40 佚名 阅读(...) 评论(...) 编辑 收藏

前几天给一位朋友解决一个OWC的问题,开始一年难度倒是没有什么,就接下来了。第二天给她答复。待自已动手以后。才感到这个问题非常棘手。要求是生成"线—柱图",这个类型在OWC 的ChartChartTypeEnum枚举类型中是不存在的。这一下可傻了眼,感到无从下手了。不停的尝试,不停的找资料,哎,承诺的后果还真严重,折腾了近四个小时。终于有点眉目,不给整个Chart 对象指定类型,给表下的Series对象指定类型,先用一个Series对象画出柱图,然后再加入一个Series对象。指定类型为线型。问题解决。代码如下:

using Microsoft.Office.Interop;
using OWC= Microsoft.Office.Interop.Owc11;
public partial class Default212 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //创建ChartSpace对象来放置图表
        OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();

        //是否显示图例
        objCSpace.HasChartSpaceLegend = true;

        //在ChartSpace对象中添加图表,Add方法返回chart对象
        OWC.ChChart objChart = objCSpace.Charts.Add(0);

        //指定图为柱形图
   

        //给定标题
        objChart.HasTitle = true;
        objChart.Title.Caption = "上半年分布图";

        //给定x,y轴的图示说明
        objChart.Axes[0].HasTitle = true;
        objChart.Axes[0].Title.Caption = "Y : 数量";
        objChart.Axes[1].HasTitle = true;
        objChart.Axes[1].Title.Caption = "X : 月份";

        //计算数据
        /*categories 和 values 可以用tab分割的字符串来表示*/
        string strSeriesName = "我的测试";
        string strSeriesName1 = "LAR";
        string strCategory = "1" + '\t' + "2" + '\t' + "3" + '\t' + "4" + '\t' + "5" + '\t' + "6" + '\t';
        string strValue = "9" + '\t' + "8" + '\t' + "4" + '\t' + "10" + '\t' + "12" + '\t' + "6" + '\t';
        string strValue1 = "0.038%" + '\t' + ".034%" + '\t' + ".039%" + '\t' + ".036%" + '\t' + ".040%" + '\t' + ".033%" + '\t';

        /*柱形图*/
        //添加一个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);

        /*折线图*/
        //再增加一个Series
       
        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 = "报废率(%)";
        //给定series的名字
        sDispLar.SetData(OWC.ChartDimensionsEnum.chDimSeriesNames,
            +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName1);

        //给定objChart[1]的值
        sDispLar.SetData
            (OWC.ChartDimensionsEnum.chDimValues,
            (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue1);

        //Ungroup series
        sDispLar.Type = OWC.ChartChartTypeEnum.chChartTypeLineMarkers;

        //输出成GIF文件.
        string strAbsolutePath = (Server.MapPath(".")) + "\\Temp\\test.gif";
        objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350);


        //创建GIF文件的相对路径.
        string strRelativePath = "./Temp/test.gif";

        //显示图片
        Image1.ImageUrl = strRelativePath.ToString();


    }
}