基本原理:

通过html页面传递一些参数到.aspx.cs执行,然后得到返回的图片显示在html页。

需引用 Interop.OWC11.dll

1、html页代码:

<img id="ImgZZT" src="data:images/chartlaoding.gif" />

<script type="text/javascript">

function ShowImage(url, imgid) {
           document.getElementById("" + imgid + "").src = url;
       }

var title = "";
       var fxsj = "百分比(%)";
       var tblx = "pie";//图的类型,pie表示饼图,bar表示柱状图
       var rdm = Math.random();
       var xfjgbh=<%=hdXfjgbh.Value%>;
       var xfdwjb=<%=hdXfdwjb.Value%>;

var url = encodeURI("Graph_jdpg.aspx?xfjgbh=" + xfjgbh + "&xfdwjb=" + xfdwjb + "&tblx=" + tblx + "&fxsj=" + fxsj + "&title=" + title + "&rdm=" + rdm);

ShowImage(url, "ImgZZT");

</script>

2、Graph_jdpg.aspx.cs代码

      DataSet ds = null;
                string sql = string.Empty;
                string xfdwjb = string.Empty;
                string xfjgbh = string.Empty;
                if (Request.QueryString["xfdwjb"] != null && Request.QueryString["xfjgbh"] != null)
                {
                    xfdwjb = Request.QueryString["xfdwjb"].ToString().Trim();
                    xfjgbh = Request.QueryString["xfjgbh"].ToString().Trim();
                    DAL.XFJG d_xfjg = new DAL.XFJG();

ds = d_xfjg.GetXFJGListProc(xfdwjb, xfjgbh, "getGraph_jdpg");//获取要显示的数据
                }
               
                if (ds.Tables[0].Rows.Count > 0)
                {

        object objPic = MyChart.GetPic(ds, Request.QueryString["tblx"].ToString(), Request.QueryString["title"].ToString(),       Request.QueryString["fxsj"].ToString(), 230, 150, "#ffffff", "#ffffff");//这是画图的真正核心方法
                    if (objPic == null)
                        Response.End();

Array arr = (Array)objPic;
                    Response.Expires = 0;
                    Response.Buffer = true;
                    Response.Clear();

MemoryStream memStream = new MemoryStream((byte[])arr);
                    memStream.WriteTo(Response.OutputStream);
                    memStream.Close();

Response.ContentType = "image/gif";
                    Response.StatusCode = 200;
                    Response.End();

    }

3、MyChart.cs

using OWC11;

GetPic()方法

/// <summary>
///
/// </summary>
/// <param name="ds">含有显示数据的dataset</param>
/// <param name="chartType">pie,bar,line</param>
/// <param name="chartTitle"></param>
/// <param name="axesTitle">图的标题</param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="strbackcolor">背景颜色,比如:#e8efed</param>
/// <param name="strBoderColor">边框颜色,比如:#ffffff</param>
/// <returns></returns>
public static object GetPic(DataSet ds,string chartType,string chartTitle,string axesTitle,int width,int height,string strbackcolor,string strBoderColor)
{
string strTitles = "",strValues = "";
DsToStr(ref strTitles,ref strValues,ds.Tables[0]);
ChartSpace chartSpace = new ChartSpaceClass();//创建ChartSpace对象来放置图表
ChChart chart = chartSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回Chart对象

chart.Border.Color = strBoderColor; //设置边框颜色

chart.Interior.Color = strbackcolor;

if(chartTitle != "")
{
chart.HasTitle = true;
chart.Title.Caption = chartTitle;
chart.Title.Font.Size = 12;
chart.Title.Font.Bold = true;
chart.Title.Font.Name = "宋体";
}

if(chartType == "bar")
{
chart.Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered3D;//.chChartTypeColumnStacked3D;,如果要平面柱状图,则为chChartTypeColumnClustered 20100701 yg
chart.PlotArea.BackWall.Interior.Color = "#FFFFFF";//背景墙的颜色
chart.PlotArea.BackWall.Thickness = 0;//背景墙的厚度
chart.PlotArea.SideWall.Interior.Color = "#FFFFFF";//边墙的颜色
chart.PlotArea.SideWall.Thickness = 0;//边墙的厚度
chart.PlotArea.Floor.Interior.Color = "#FFFFFF"; // 底墙的底色
chart.PlotArea.Floor.Thickness = 0;//设置底墙的厚度
chart.ProjectionMode = OWC11.ChartProjectionModeEnum.chProjectionModeOrthographic; //设置投影方式
chart.Inclination = 8;//设置倾角,指定三维图表的视图斜率(-90 - 90)
chart.ChartDepth = 15;//设置深度比,指定三维图表相对于宽度的深度(0-500)
chart.ExtrudeAngle = 55;//延伸方向(0-360),仅在chProjectionModeOrthographic时有效

chart.Axes[1].Scaling.Minimum = 0;
if(axesTitle != "")
{
chart.Axes[1].HasTitle = true;
chart.Axes[1].Title.Caption = axesTitle;//设置数据轴标题,即X轴
chart.Axes[1].Title.Font.Size = 10;
}

chart.Axes[1].Orientation = (int)ChartLabelOrientationEnum.chLabelOrientationHorizontal;//设置分类标签的字体方向,X轴
chart.Axes[0].Font.Size = 9;
chart.Axes[0].Font.Name = "宋体";
chart.Axes[0].Orientation = (int)ChartLabelOrientationEnum.chLabelOrientationHorizontal;//设置分类标签的字体方向,Y轴
chart.Axes[1].HasMajorGridlines = false;//去掉水平网线
chart.Axes[1].HasMinorGridlines = false;//去掉水平网线

ChSeries objSeries = chart.SeriesCollection.Add(0); //添加一个series
ChDataLabels objDataLabels = objSeries.DataLabelsCollection.Add();
objDataLabels.HasValue = true; // 柱子上面的数字是否显示
//objDataLabels.HasPercentage = true;
objDataLabels.Font.Color = "Black"; // 柱子上面的数字颜色是黑色的

objSeries.SetData( OWC11.ChartDimensionsEnum.chDimCategories,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,strTitles );//给定series的分类
objSeries.SetData( OWC11.ChartDimensionsEnum.chDimValues,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,strValues );//给定具体值

for(int i=0;i<objSeries.Points.Count;i++)
{
if(i>14)
break;
objSeries.Points[i].Interior.Color = colorArr[i];
objSeries.Points[i].Border.Color = colorArr[i];
}
}
else if(chartType == "line")
{
chart.Type = OWC11.ChartChartTypeEnum.chChartTypeSmoothLineMarkers;//曲线
chart.PlotArea.Interior.Color = "#FAFAFA";//背景墙的颜色
if(axesTitle != "")
{
chart.Axes[1].HasTitle = true;
chart.Axes[1].Title.Caption = axesTitle;//设置数据轴标题
chart.Axes[1].Title.Font.Size = 10;
}
chart.Axes[1].Scaling.Minimum = 0;
chart.Axes[0].Font.Size = 10;
chart.Axes[0].Font.Name = "宋体";
chart.Axes[0].Orientation = (int)ChartLabelOrientationEnum.chLabelOrientationHorizontal;//设置分类标签的字体方向
ChSeries objSeries = chart.SeriesCollection.Add(0); //添加一个series
ChDataLabels objDataLabels = objSeries.DataLabelsCollection.Add();
objDataLabels.HasValue = true; // 柱子上面的数字是否显示
objDataLabels.Font.Color = "Black"; // 柱子上面的数字颜色是黑色的
objSeries.SetData( OWC11.ChartDimensionsEnum.chDimCategories,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,strTitles );//给定series的分类
objSeries.SetData( OWC11.ChartDimensionsEnum.chDimValues,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,strValues );//给定具体值
objSeries.Line.Color = colorArr[0];
objSeries.Interior.Color = colorArr[3];
}
else if(chartType == "pie")
{
// chart.HasTitle = true;
// chart.Title.Caption = axesTitle.Substring(0,axesTitle.IndexOf("("));
// chart.Title.Font.Size = 10;
// chart.Title.Font.Bold = true;
// chart.Title.Font.Name = "宋体";

chart.Type = OWC11.ChartChartTypeEnum.chChartTypePieExploded3D;
chart.ProjectionMode = OWC11.ChartProjectionModeEnum.chProjectionModePerspective; //设置投影方式,透视
chart.Perspective = 15;//透视系数
chart.Inclination = 64;
chart.HasLegend = true;
chart.Legend.Position = ChartLegendPositionEnum.chLegendPositionRight;//图例在图片右侧

chart.Legend.Font.Size = 9;//设置图例字体
chart.Legend.Font.Name = "宋体";
ChSeries objSeries = chart.SeriesCollection.Add(0); //添加一个series
objSeries.SetData( OWC11.ChartDimensionsEnum.chDimCategories,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,strTitles );//给定series的分类
objSeries.SetData( OWC11.ChartDimensionsEnum.chDimValues,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,strValues );//给定具体值

ChDataLabels objDataLabels = objSeries.DataLabelsCollection.Add();
objDataLabels.HasValue = false; //显示各部分的数值
objDataLabels.HasPercentage = true; //显示各部分的百分比
objDataLabels.Font.Size = 10; //设置饼状图中字体的大小
objDataLabels.Font.Color = "Black";
for(int i=0;i<objSeries.Points.Count;i++)
{
if(i>14)
break;
objSeries.Points[i].Interior.Color = colorArr[i];
objSeries.Points[i].Border.Color = colorArr[i];
}
}
else
{
return null;
}
object objPic = chartSpace.GetPicture("GIF", width, height);
return objPic;
}

DsToStr方法

/// <summary>
/// 转换DataTable为OWC特定格式字符串
/// </summary>
/// <param name="strTitles">组标签字符串</param>
/// <param name="strValues">数据字符串</param>
/// <param name="dt">DataTable数据源</param>
private static void DsToStr(ref string strTitles,ref string strValues,DataTable dt)
{
string[] titles = new string[dt.Rows.Count];
string[] values = new string[dt.Rows.Count];
for(int i=0;i<dt.Rows.Count;i++)
{
titles[i] = dt.Rows[i][0].ToString() == "" ? "未知" : dt.Rows[i]["mc"].ToString();
values[i]= dt.Rows[i][1].ToString() == "" ? "0" : dt.Rows[i]["val"].ToString();
}
strTitles = String.Join("\t",titles);
strValues = String.Join("\t",values);
}

增值服务哈:office自带的关于owc的帮助文档:

C:\Program Files\Common Files\Microsoft Shared\Web Components\11\2052\OWCVBA11.CHM

转载于:https://www.cnblogs.com/yugen/archive/2010/08/12/1798436.html

利用owc11绘制图(显示的是图片)相关推荐

  1. 利用OpenCV读图绘制栅格导航

    利用OpenCV读图绘制栅格导航 实现效果 利用PC的绘图工具预处理图像 利用OpenCV识别图像得出障碍点信息 图像像素row和col的解释 查看图像数据 将index数据导入MATLAB绘制栅格 ...

  2. 利用Origin绘制等高线颜色填充图:初步绘制与细化

    利用Origin绘制梯度填充图:初步绘制与细化 前言 一."等高线-颜色填充"图的初步绘制 1.数据表准备 1.1 新建工作簿 1.2 数据导入 2.绘制"等高线-颜色填 ...

  3. matlab色块轮廓,利用matlab绘制矩阵色块图.doc

    <利用matlab绘制矩阵色块图.doc>由会员分享,可在线阅读,更多相关<利用matlab绘制矩阵色块图.doc(19页珍藏版)>请在金锄头文库上搜索. 1.R语言中有一个根 ...

  4. %matplotlib inline是jupyter notebook里的命令, 意思是将那些用matplotlib绘制的图显示在页面里而不是弹出一个窗口

    %matplotlib inline是jupyter notebook里的命令, 意思是将那些用matplotlib绘制的图显示在页面里而不是弹出一个窗口 终端输入jupyter notebook,  ...

  5. 利用 CoreGraphics 绘制折线图

    效果与元素分析 实现效果图如下: 首先对折线图进行元素分割 包含以下六部分元素 渐变背景 折线 折线上的点 折线范围内渐变 参考线 文本显示的 Label 除了6之外,其他几个元素都在 draw(_: ...

  6. MATLAB可视化实战系列(二十四)-三维可视化如何利用圆锥图显示向量场?

    前言 在物理学中,我们学习了矢量,知道了磁力线等矢量图.如何画出优美的矢量场图呢?科学计算软件matlab可以很容易地绘制出矢量场图.下面跟随博主一起来看下matlab高级可视化内容,如何利用圆锥图显 ...

  7. 利用QCustomePlot绘制热力图,瀑布图,频谱色图等

    有一个问题l困扰了我很多天,就是如何在QT中实现跟MATALB中imagesc函数一样能够根据二维数组存储的数据的大小自动绘制不同颜色的图形,就如下图所示的瀑布图. 由于自己是边学边做,没有经过系统学 ...

  8. php课程 8-28 php如何绘制生成显示图片

    php课程 8-28 php如何绘制生成显示图片 一.总结 一句话总结:gd库轻松解决 1.php图片操作生成的图的两种去向是什么? 一种在页面直接输出,一种存进本地磁盘 2.php操作图片的库有哪些 ...

  9. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...

    说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...

最新文章

  1. Newtonsoft.Json 获取匿名类数据
  2. Java笔记-通过放射获取类中成员名及调用get方法及map构造JSON数据
  3. HDU 4336 Card Collector(容斥原理+状态压缩)
  4. IOS 学习笔记 2015-04-15 手势密码(原)
  5. Mysql多表关联查询
  6. mysql中名词解析
  7. nginx 1.8.0下载
  8. Java和python哪个好,学哪个有用。
  9. CentOS7.0设置中文输入法
  10. 重庆北大青鸟校区【学员心声】:学习是我们前进的动力
  11. python调用通达信函数大全_通达信dll开发实例,使用python在通达信里面选股
  12. 什么是功能性测试?-Alltesting|泽众云测试
  13. win7计算机进行重镜像,win7镜像重装系统图文教程
  14. ORACLE利用存储过程新增字段
  15. 如何以最快速度将Vue接入在线客服系统?
  16. sublime text3设置快捷键在浏览器中打开
  17. 阿里云ECS重置实例密码
  18. PLC远程监控与数据采集方案
  19. 如何直观的理解机器学习过拟合和欠拟合?
  20. 音视频开发系列(15):视频与音频同步

热门文章

  1. Linux Signal信号表
  2. simulink 风火水机组二次调频,三机九节点模型风机水轮机火电汽轮机共同参与系统的二次调频IEEE9节点系统
  3. 如何治好自己的选择恐惧症
  4. 前端福音:Serverless 和 SSR 的天作之合
  5. android 图表控件的实现(一)
  6. 220V转变12V电源IC
  7. 贝叶斯条件概率/贝叶斯网络
  8. mysql6.5client下载_mysql-client多个版本客户端安装
  9. 使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息
  10. c语言读取一行的前几个字符串,c语言读取文件某一列 c语言 读取文件中某一行的前一行...