这个可以使用VB的OLE编程,其中《VB从入门到精通》这本书有讲到,不过讲的比较乱。。

解决方案 »

  1.   

    那以用OLE调用的话。是不是要求机器必须有 EXCEL 这样的话速度是不是会很慢。
    还有别的方法吗?用别的语言可以吗?
      

  2.   

    用ASP做,很方便的,而且可以变换图形样式
      

  3.   

    用ASP做,然后把ASP嵌入到VB里就行了
      

  4.   

    这是一段ASP程序用WEBBROWSER控件调用就行了
    <%@ Language=VBScript %>
    <%'接收点击时传递的参数:项目ID(ProjectID),项目类别(ProjectType),项目精度(ProjectCurrency)
    '如果分析方法session("method")为汇总单位,创建对象objrjz为H华源财务.C财务分析汇总单位
    '其它的分析方法下,创建对象objrjz为H华源财务.C财务分析class
    '将接收到的参数传递给创建的对象objrjz
    '根据不同的分析方法将不同的模板传送给对象objrjz
    %>
    <%
    dim objsheet  '电子表格控件
         
    dim sql,sql1, thedate
    dim thecompanyid,thepath,thefilename
    dim projectname
    dim projectid,projecttype,projectcurrency
    dim objrjz,S
    projectid=Request.QueryString ("ProjectID")
    projecttype=Request.QueryString ("ProjectType")
    projectcurrency=Request.QueryString ("ProjectCurrency")
    sql="select f项目名称 FROM td项目定义表 where(f项目ID ='" & projectid & "')"
        Set rs=SERVER.CreateObject ("ADODB.Recordset")
        rs.Open sql, APPLICATION("PWEBSJK")
        projectname=rs("f项目名称")
        
    sql="select f单位ID FROM td单位档案 where(f单位名称 ='" & session("company") & "')"
        Set rs=SERVER.CreateObject ("ADODB.Recordset")
        rs.Open sql, APPLICATION("PWEBSJK")
        thecompanyid=rs("f单位ID")
    thedate=dateserial(session("year"),session("month"),1)
    set objsheet= server.CreateObject ("owc.spreadsheet.9")
       set objrjz = server.CreateObject("H华源财务.C财务分析直方图")  
       objrjz.OpenDatabase  "cwfxjczc", "sa"
       objrjz.TheDate = thedate
       objrjz.TheCompanyID =thecompanyid
       objrjz.ProjectID = projectid
       objrjz.ProjectType = projecttype
           objrjz.ProjectCurrency = projectcurrency
           if session("method")="环比分析" then
       objrjz.BeginFormat  objsheet.ActiveSheet, "c:\财务分析\环比直方图.htm"
       elseif  session("method")="同比分析" then
       objrjz.BeginFormat  objsheet.ActiveSheet, "c:\财务分析\同期定比直方图.htm"
       elseif  session("method")="平均比" then
       objrjz.BeginFormat  objsheet.ActiveSheet, "c:\财务分析\平均比直方图.htm"
       elseif  session("method")="预算比" then
       objrjz.BeginFormat  objsheet.ActiveSheet, "c:\财务分析\预算比直方图.htm"
       elseif  session("method")="结构分析" then
       objrjz.BeginFormat  objsheet.ActiveSheet, "c:\财务分析\结构比直方图.htm"
       end if 
       S = REPLACE(objsheet.HTMLData,CHR(34),"&quot;")
       S = REPLACE(S,CHR(13) & CHR(10),"&#13;&#10")
           set objrjz = nothing 
       set objsheet = nothing
            
    %><META name="VI60_DefaultClientScript" Content="VBScript"><META NAME="GENERATOR" Content="MSHTML 5.00.2314.1000" >
    <SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
    <!--Sub window_onload
    <%if session("method")="环比分析" then %>
    BindChartToSpreadsheet Chartspace1, Spreadsheet1, "a5", "b4:f4", "b5:f5", False
    <%elseif  session("method")="同比分析" then%>
    BindChartToSpreadsheet Chartspace1, Spreadsheet1, "a5", "b4:f4", "b5:f5",  False
    <%elseif  session("method")="平均比" then%>
    BindChartToSpreadsheet Chartspace1, Spreadsheet1, "a5:a6", "b4:f4", "b5:f6",  False
    <%elseif  session("method")="预算比" then%>
    BindChartToSpreadsheet Chartspace1, Spreadsheet1, "a5:a6", "b4:f4", "b5:f6", False
    <%elseif  session("method")="结构分析" then%>
    BindChartToSpreadsheet Chartspace1, Spreadsheet1, "a5", "b4:f4", "b5:f5",  False
    <%end if%>
    'sheet.ViewableRange = sheet.ActiveSheet.UsedRange.Address 
    ' sheet.Range("d6").FreezePanes 5 
    Spreadsheet1.ActiveSheet.Cells(1,1).Select End Sub' BindChartToSpreadsheet()
    '
    ' Purpose: Binds a chart to specified ranges in the source spreadsheet
    ' In:      cspace           reference to the ChartSpace object
    '          sheet            reference to the Spreadsheet object
    '          srngSeries       string-based range reference to where the
    '                           series names come from
    '          srngCategories   string-based range reference to where the
    '                           category names come from
    '          srngValues       string-based range reference to where the
    '                           values are
    '
    Sub BindChartToSpreadsheet(cspace, sheet, srngSeries, srngCategories, _
                               srngValues, fSeriesInCols)
        ' Local variables
        Dim cht          ' Chart object that we'll create in the chart space
        Dim ser          ' Temp Series
        Dim rngValues    ' Range object of values
        
        ' Grab the Constants object so that we can use constant names in
        ' the script. Note: This is needed only in VBScript -- do not include
        ' this in VBA code.    
        set c = cspace.Constants
        
        ' Clear out anything that is in the chart space
        cspace.Clear    ' First tell the chart that its data is coming from the spreadsheet
        set cspace.DataSource = sheet
        
        ' Create a chart in the chart space
        set cht = cspace.Charts.Add()
        cht.HasLegend = True
        <%if session("picturetype")="线型图" then %>
        cht.Type = c.chChartTypeLine
        <%end if%>
        ' Now call SetData to bind the various dimensions.
        ' Second parameter is zero, meaning the first data source should be
        ' used if there are multiple data sources.
        cht.SetData c.chDimSeriesNames, 0, srngSeries
        cht.SetData c.chDimCategories, 0, srngCategories
        
        ' The spreadsheet can bind to one-dimensional ranges only,
        ' so loop through the series collection and set the values
        ' for each series individually
        set rngValues = sheet.Range(srngValues)
        
        for each ser in cht.SeriesCollection
            if fSeriesInCols then
                ser.SetData c.chDimValues, 0, _
                    rngValues.Columns(ser.Index + 1).Address
            else
                ser.SetData c.chDimValues, 0, _
                    rngValues.Rows(ser.Index + 1).Address
            end if
        next 'ser
        
    End Sub 'BindChartToSpreadsheet()-->
    </SCRIPT>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD><TITLE></TITLE>
    <BODY>
    <a href="财务分析内容1.asp?ProjectID=<%=session("theprojectid")%>&ProjectType=<%=projecttype%>&ProjectCurrency=<%=projectcurrency%>" >返回</a>
    <%=session("company")%>
    <p align=center>
    <%=projectname%><!-- Chart Control -->
    <object classid="clsid:0002E500-0000-0000-C000-000000000046" 
    id="ChartSpace1"
    style="HEIGHT: 50%; WIDTH: 100%" width="576" height="384">
    </object>
    <OBJECT classid=clsid:0002E510-0000-0000-C000-000000000046 height=100 id=Spreadsheet1 
    style="HEIGHT:200px; LEFT: 2px; TOP: 10px; WIDTH: 550px" title=财务分析 width=700 
    VIEWASTEXT><PARAM NAME="HTMLURL" VALUE="">
    <PARAM NAME="HTMLData" VALUE="<%=s%>">
    <PARAM NAME="DataType" VALUE="HTMLDATA">
    <PARAM NAME="AutoFit" VALUE="0">
    <PARAM NAME="DisplayColHeaders" VALUE="-1">
    <PARAM NAME="DisplayGridlines" VALUE="0">
    <PARAM NAME="DisplayHorizontalScrollBar" VALUE="-1">
    <PARAM NAME="DisplayRowHeaders" VALUE="0">
    <PARAM NAME="DisplayTitleBar" VALUE="0">
    <PARAM NAME="DisplayToolbar" VALUE="0">
    <PARAM NAME="DisplayVerticalScrollBar" VALUE="-1">
    <PARAM NAME="EnableAutoCalculate" VALUE="-1">
    <PARAM NAME="EnableEvents" VALUE="-1">
    <PARAM NAME="MoveAfterReturn" VALUE="-1">
    <PARAM NAME="MoveAfterReturnDirection" VALUE="0">
    <PARAM NAME="RightToLeft" VALUE="0">
    <PARAM NAME="ViewableRange" VALUE="1:65536">
    </OBJECT></BODY>
    </HTML>