利用owc11绘制图(显示的是图片)

基本原理:

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

 需引用 Interop.OWC11.dll

1、html页代码:

<img id="ImgZZT" src="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;

 

ContractedBlock.gif ExpandedBlockStart.gif 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;
}

 

 

 

ContractedBlock.gif ExpandedBlockStart.gif 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值