使用Microsoft.Office.Interop.Owc11进行绘图

本文介绍如何利用Microsoft Office Web Components (OWC) 11进行数据可视化,特别是通过C#代码创建柱状图的过程。包括从数据集获取数据、设置图表样式以及导出图表为GIF图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >





using Microsoft.Office.Interop.Owc11;  导入命名空间



//使用Microsoft.Office.Interop.Owc11进行绘图

    protected void GetDistrictSales(string getDate)

    {

        DataSet ds = admin.GetDistrictReg(getDate);

        GridView1.DataSource = ds.Tables["GetDistrictReg"];

        GridView1.DataBind();

        //DataList1.DataSource = ds.Tables["GetDistrictReg"];

        //DataList1.DataBind();

        string x = "";

        string y = "";

        //string file;

        if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)

        {

            x = ds.Tables["GetDistrictReg"].Rows[0]["d_districtName"].ToString();

            y = ds.Tables["GetDistrictReg"].Rows[0]["coun"].ToString();

            for (int i = 1; i < ds.Tables[0].Rows.Count; i++)

            {

                x += '/t' + ds.Tables[0].Rows[i]["d_districtName"].ToString();

                y += '/t' + ds.Tables[0].Rows[i]["coun"].ToString();

            }



            //创建ChartSpace对象来放置图表

            ChartSpace objCSpace = new ChartSpaceClass();



            //在ChartSpace对象中添加图表,Add方法返回chart对象

            ChChart objChart = objCSpace.Charts.Add(0);



            //指定图表的类型。类型由ChartChartTypeEnum枚举值得到

            objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;



            //设置两柱之间的间距,数值越大柱子越细

            objChart.GapWidth = 500;





            //指定图表是否需要图例

            objChart.HasLegend = true;



            //给定标题

            objChart.HasTitle = true;

            objChart.Title.Caption = getDate + "各地区报名人数汇总";



            //给定x,y轴的图示说明

            //x轴

            objChart.Axes[0].HasTitle = true;

            objChart.Axes[0].Title.Caption = "X : 区域: ";//+ danwei;

            objChart.Axes[0].Title.Font.Size = 12;

            objChart.Axes[0].Title.Font.Color = "blue";

            objChart.Axes[0].Font.Size = 10;

            objChart.Axes[0].Font.Bold = true;





            //y轴

            objChart.Axes[1].HasTitle = true;

            objChart.Axes[1].Title.Caption = "Y : ";

            objChart.Axes[1].Title.Font.Color = "blue";

            objChart.Axes[1].Title.Font.Size = 12;

            objChart.Axes[1].Font.Size = 10;

            objChart.Axes[1].Font.Bold = true;





            // objChart.SeriesCollection[1].DataLabelsCollection[0].HasValue = true;

            //objChart.SeriesCollection[1].DataLabelsCollection.Add();



            //计算数据

            /*categories 和 values 可以用tab分割的字符串来表示*/

            //string strSeriesName = "图例 1";



            //添加一个series

            objChart.SeriesCollection.Add(0);



            //给定series的名字

            //objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);



            //给定分类

            objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, x);



            //给定值

            objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, y);



            //给每个柱子上绑定数据

            objChart.SeriesCollection[0].DataLabelsCollection.Add();            

            //是否绑定名称

            objChart.SeriesCollection[0].DataLabelsCollection[0].HasCategoryName = false;

            //设置柱子的字体大小以及颜色

            objChart.SeriesCollection[0].DataLabelsCollection[0].Font.Size = 10;

            objChart.SeriesCollection[0].DataLabelsCollection[0].Font.Bold = true;



            //输出成GIF文件.

            //file = "/" + Guid.NewGuid().ToString() + ".gif";            

            string strAbsolutePath = (Server.MapPath(".")) + "//ShowData1.gif";



            //file = Guid.NewGuid().ToString() + ".gif";

            //string strAbsolutePath = (Server.MapPath(".")) + "//" + file;



            objCSpace.ExportPicture(strAbsolutePath, "GIF", 780, 350);

            Image1.Visible = true;

            



        }

        else

        {

            //file = "/images/0.gif";

            Image1.Visible = false;

            

        }

    }

让用户可以随时查找曲线上任意点的坐标(函数值) 附件的 .mht文件,是一个简单介绍贝塞尔三次插值的文档,可以用IE打开,更多贝塞尔插值的算法,可以用搜索引擎找 附件的 .xls文件,打开以后,会看见三个工作表,分别演示了 找一个数值在曲线上的一组对应点 找一个数值在曲线上的所有对应点 和贝塞尔曲线是怎样在通过每两个节点的(每一对输入的X-Y数值代表平面坐标系的一个点,称为节点,Excel的平滑曲线通过每一个节点) 要在其他Excel文档使用 BezireInt() 函数,需要按Alt+F11,双击模块一 复制所有文字 然后打开其他Excel文档按Alt+F11,插入---模块,然后粘贴所有文字 自定义函数的使用方法是: 在空白单元格输入 =BezierInt(X坐标的范围,Y坐标的范围,待查的数值) 函数就会返回一个包含六个元素的数组,分别是三个点的X,Y坐标 如: 你根据 a1:a4的数值作为X值,b2:b4的数值作为Y值,画了一个平滑线散点图 想查找c1的数值是不是在这条曲线上 就可以输入 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,1) 得到曲线上第一个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,2) 得到曲线上第一个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,3) 得到第2个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,4) 得到第2个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,5) 得到第3个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,6) 得到第3个 X值=C1数值的点的Y坐标 如果有多段曲线上的点包含C1的数值,那么可以增加输入参数,指定从哪个节点开始查找 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,1) 得到从第三组X-Y数据开始查找, 返回第一个符合C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,2) 得到从第三组X-Y数据开始查找,返回第一个符合C1数值的点的Y坐标 函数默认输入数值是X值,要根据Y值找点的话,还可以增加输入参数, 指定输入的是Y值 =Index( BezierInt(a1:a4,b1:b4,c1,1,"Y"),1,1) 得到返回曲线上第一个 Y值=C1数值的点的X坐标如此类推......
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值