基本原理:

通过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;

 

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

posted on 2010-08-12 21:11  不远道人  阅读(1003)  评论(0编辑  收藏  举报