我想画一个图形 数据源如下 , a列为x周  , b 列为左侧y轴 我先用a b 列的数据用OWC在web上显示
了一个柱状图  , 我想把c 列(b列数据累加在除b列总和) 也添加到这个图像上 ,在这个图形的右侧
添加一个轴 其scaling 为 0% - 100% 使用一个曲线显示在这个图形上,该如何实现?请高手帮忙提供一个思路,谢谢!!
a        b         c
1 3 0.12 
2 4 0.28 
3 5 0.48 
4 3 0.60 
5 4 0.76 
6 2 0.84 
7 1 0.88 
8 1 0.92 
8 2 1.00 

解决方案 »

  1.   

    顶,在WEB上作图偶还不熟悉呢
      

  2.   

    我正在找/
    http://www.evget.com/view/service.asp
      

  3.   

    下面是实现这种功能的VB.NET版本的ASP.NET例子与代码:OWC.aspx:<%@ Page Language="vb" AutoEventWireup="false" Codebehind="OWC.aspx.vb" Inherits="aspxWeb.OWC"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
      <HEAD>
        <title>WebForm1</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="javascript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5";>
      </HEAD>
      <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
          <asp:placeholder id="ChartHolder" runat="server"></asp:placeholder>
        </form>
      </body>
    </HTML>
    OWC.aspx.vb:Imports System
    Imports OWC
    Imports System.Web.UIPublic Class OWC
      Inherits System.Web.UI.Page
      Protected WithEvents ChartHolder As System.Web.UI.WebControls.PlaceHolder#Region " Web 窗体设计器生成的代码 "  '该调用是 Web 窗体设计器所必需的。
      <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()  End Sub  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
      End Sub#End Region  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
        '创建ChartSpace对象来放置图表
        Dim objCSpace As ChartSpace = New ChartSpaceClass()
        '在ChartSpace对象中添加图表,Add方法返回chart对象
        Dim objChart As WCChart = objCSpace.Charts.Add(0)
        '指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
        objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered    '指定图表是否需要图例
        objChart.HasLegend = True    '给定标题
        objChart.HasTitle = True
        objChart.Title.Caption = "1-6说数据分布图"    '给定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分割的字符串来表示*
        Dim strSeriesName As String = "图例 1"
        Dim strCategory As String = "1" + ControlChars.Tab + "2" + ControlChars.Tab _
     + "3" + ControlChars.Tab + "4" + ControlChars.Tab + "5" + ControlChars.Tab _
     + "6" + ControlChars.Tab
        Dim strvalue As String = "9" + ControlChars.Tab + "8" + ControlChars.Tab _
     + "4" + ControlChars.Tab + "10" + ControlChars.Tab + "12" + ControlChars.Tab _
     + "6" + ControlChars.Tab    '添加一个series
        objChart.SeriesCollection.Add(0)    '给定series的名字
        objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimSeriesNames,_
      ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName)    '给定分类
        objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimCategories,_
      ChartSpecialDataSourcesEnum.chDataLiteral, strCategory)    '给定值
        objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimvalues,_
      ChartSpecialDataSourcesEnum.chDataLiteral, strvalue)
        '输出成GIF文件.
        Dim strAbsolutePath As String = (Server.MapPath(".")) + "\Images\test.gif"
        objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350)    '创建GIF文件的相对路径.
        Dim strRelativePath As String = "Images/test.gif"
        '把图片添加到placeholder.
        Dim strImageTag As String = "<IMG SRC='890_files/&quot; + strrelativepath + &quot;'/>"    ChartHolder.Controls.Add(New LiteralControl(strImageTag))
      End Sub
      
    End Class
      

  4.   

    下面是C#版本的OWC.asp.csusing System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Office.Interop; 
    namespace Microsoft.Office.Interop.OWC使用指南
    {
     /// <summary>
     /// WebForm1 的摘要说明。
     /// </summary>
     public class WebForm1 : System.Web.UI.Page
     {
      protected System.Web.UI.WebControls.PlaceHolder ChartHolder;
      private Microsoft.Office.Interop.OWC.ChartChartTypeEnum GetChartType(int typeIndex)
      {
       int i;
       Microsoft.Office.Interop.OWC.ChartChartTypeEnum myTE;
       i=typeIndex;
       
       switch(i)
       {
        case 0:
         myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeColumnClustered;
         return myTE;
        case 1:
         myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypePie;
         return myTE;
        case 2:
         myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeSmoothLine;
         return myTE;
        case 3:
         myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeArea;
         return myTE;
        case 4:
         myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeRadarLine;
         return myTE;
        default:
         myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeColumnClustered;
         return myTE;
       }
      }  private void Page_Load(object sender, System.EventArgs e)
      {
       // 在此处放置用户代码以初始化页面
       //创建ChartSpace对象来放置图表
       Microsoft.Office.Interop.OWC.ChartSpace objCSpace = new Microsoft.Office.Interop.OWC.ChartSpaceClass();    //在ChartSpace对象中添加图表,Add方法返回chart对象
       
       Microsoft.Office.Interop.OWC.ChChart   objChart = objCSpace.Charts.Add (0);    //指定图表的类型。类型由Microsoft.Office.Interop.OWC.ChartChartTypeEnum枚举值得到
       //objChart.Type = Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeColumnClustered;
       //上面的是画棒图的方法
       //objChart.Type = Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeSmoothLine;
       //上面的是画平滑曲线的方法此主题相关图片如下:   objChart.Type =Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeRadarLine;
       //上面的是画雷达线的方法
       //objChart.Type =Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeArea;
       //上面的是画区域线的方法   //objChart.Type =Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypePie;
       //上面的是画饼图的方法,但是要关掉一些参数,比如
       /*//objChart.Axes[0].HasTitle = true;
       //objChart.Axes[0].Title.Caption = "Y : 数量";
       //objChart.Axes[1].HasTitle = true;
       //objChart.Axes[1].Title.Caption = "X : 月份";    * */此主题相关图片如下:
    此主题相关图片如下:
       //指定图表是否需要图例
       objChart.HasLegend = true;   //给定标题
       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 = "图例 1";
       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';   //添加一个series
       objChart.SeriesCollection.Add(0);   //给定series的名字
       objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimSeriesNames,
        + (int)Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);   //给定分类
       objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimCategories,
        + (int)Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);         //给定值
       objChart.SeriesCollection[0].SetData
        (Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimvalues,
        (int)Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strvalue); 
       //输出成GIF文件.
       string strAbsolutePath = (Server.MapPath(".")) + "\\test.gif";
       objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350);   //创建GIF文件的相对路径.
       string strRelativePath = "./test.gif";   //把图片添加到placeholder.
       string strImageTag = "<IMG SRC='" + strRelativePath + "'/>";
       ChartHolder.Controls.Add(new LiteralControl(strImageTag));
      }  #region Web Form Designer generated code
      override protected void OnInit(EventArgs e)
      {
       //
       // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
       //
       InitializeComponent();
       base.OnInit(e);
      }
     
      /// <summary>
      /// 设计器支持所需的方法 - 不要使用代码编辑器修改
      /// 此方法的内容。
      /// </summary>
      private void InitializeComponent()
      {    
       this.Load += new System.EventHandler(this.Page_Load);  }
      #endregion }
    }
    如果用ADO.NET的DataSet对象,可以生成以TAB分割的字符串:strvalue += (nodes.Item(j).ChildNodes.Item(0).InnerText + '\t');
    strCategory += (nodes.Item(j).ChildNodes.Item(1).InnerText + '\t');Microsoft.Office.Interop名称空间指向Office XP PIA,PIA应该事先安装到Web服务器上。编译源代码时要用到Office XP PIA OWC的DLL文件。如果用VS.NET编译,只要加入一个Microsoft.Office.Interop.Owc.dll文件的引用即可(位于解开Office XP PIA文件的目录),如果从命令行编译,必须按照下列方式使用/r:参数: vbc /t:library /out:bin\getchart.dll /r:System.dll /r:System.Web.dll 
       /r:System.Data.dll 
       /r:C:\oxppia\Microsoft.Office.Interop.Owc.dll getchart.aspx.vb
      

  5.   

    自己搞定了 呵呵
    可以看帮助 具体请看帮助文件 Ungroup 方法
    Sub Window_Onload()    Dim asSeriesNames(1)
        Dim asCategories(3)
        Dim aiSeries1(3)
        Dim alSeries2(3)
        Dim chConstants
        Dim chtNewChart
        Dim serUnitSales
        Dim serDispInc
        Dim axIncomeAxis    asSeriesNames(0) = "UnitSales"
        asSeriesNames(1) = "Disposable Income"    asCategories(0) = "Item 1"
        asCategories(1) = "Item 2"
        asCategories(2) = "Item 3"
        asCategories(3) = "Item 4"    aiSeries1(0) = 75
        aiSeries1(1) = 84
        aiSeries1(2) = 30
        aiSeries1(3) = 94    alSeries2(0) = 14522
        alSeries2(1) = 17321
        alSeries2(2) = 9424
        alSeries2(3) = 41782    Set chConstants = ChartSpace1.Constants    ' Enagble the display of the legend.
        ChartSpace1.HasChartSpaceLegend = True    ' Add a new chart to Chartspace1.
        Set chtNewChart = ChartSpace1.Charts.Add    ' Specify that the chart is a column chart.
        chtNewChart.Type = chConstants.chChartTypeLineMarkers    ' Bind the chart to the arrays.
        chtNewChart.SetData chConstants.chDimSeriesNames, chConstants.chDataLiteral, asSeriesNames
        chtNewChart.SetData chConstants.chDimCategories, chConstants.chDataLiteral, asCategories    Set serUnitSales = chtNewChart.SeriesCollection(0)    serUnitSales.SetData chConstants.chDimValues, chConstants.chDataLiteral, aiSeries1    Set serDispInc = chtNewChart.SeriesCollection(1)    serDispInc.SetData chConstants.chDimValues, chConstants.chDataLiteral, alSeries2    ' Ungroup the series.
        serDispInc.Ungroup True    ' Add a new value axis to the chart based on the values in the series.
        Set axIncomeAxis = chtNewChart.Axes.Add(serDispInc.Scalings(chConstants.chDimValues))    ' Place the axis on the right side of the chart.
        axIncomeAxis.Position = chConstants.chAxisPositionRight    ' Display the series as columns.
        serDispInc.Type = chConstants.chChartTypeColumnClusteredEnd Sub