在vb组件内调用excel2000实现GIF饼图

原创 2001年05月26日 14:32:00
在vb组件内调用excel2000实现GIF饼图
http://www.tongyi.net    点击:405  

在vb组件内调用excel2000实现GIF饼图
  当我第一次使用excel的时候,就为excel的图表功能所倾倒,实在强大,并且那些图也挺漂亮了。后来我尝试着在vb里面调用excel所支持的vba功能,发现功能的确强大,就是十分繁琐。后来就考虑用vb在excel外面包一层,写成对象,去掉我们不需要的特性。这样掉用起来就方便多了,所谓一劳永逸 :P。
  在这里,我将像大家介绍一个用vb编写的饼图组件,你只需要给它几个简单的参数,就可以生成一副GIF格式的图片给你。调用例子如下:
   
     Dim obj
     Set obj = CreateObject("ChinaaspChart.pie")
     obj.AddValue "男", 150
     obj.AddValue "女", 45
     obj.AddValue "不知道", 15
     obj.ChartName = "性别比例图"
     obj.FileName = "d:/123.gif"
     obj.SaveChart
  除了在vb里面可以调用,这段代码同样也可以在asp里面调用。
   
  下面请follow me 编写我们的组件。
   1.New project , 请选择activex dll,在project explorer面板上选择project1,然后在属性面板上修改其name为ChinaASPChart。同样把里面的class modules修改为pie

   2.保存该project,将project存为chinaaspchart.vbp,将class1.cls存为pie.cls。

   3.菜单project,选择菜单项References,然后请把Microsoft Active Server Pages Ojbect Library、Microsoft Excel 9.0 Object Library、COM+ Services Type Library选上。
注意:在NT4/win98上没有COM+ Service Type Library这个东东,应该选Microsoft Transaction Server Type Library

   4.编辑pie.cls,代码如下:


  '------------------------------------------------------------------------------- 
  Dim xl
  Dim m_chartName
  Dim m_chartData()
  Dim m_chartType
  Dim m_fileName
  Public ErrMsg
  Public foundErr
  Dim iCount
  Type m_Value
      label As String
      value As Double
  End Type
  Dim tValue As m_Value
  Public Property Let ChartType(ChartType)
      m_chartType = ChartType
  End Property
  Public Property Get ChartType()
      ChartType = m_chartType
  End Property

  Public Property Let ChartName(ChartName)
      m_chartName = ChartName
  End Property
  Public Property Get ChartName()
      ChartName = m_chartName
  End Property
  Public Property Let FileName(fname)
      m_fileName = fname
  End Property
  Public Property Get FileName()
      FileName = m_fileName
  End Property
    
  Public Sub AddValue(label, value)
      iCount = iCount + 1
      ReDim Preserve m_chartData(iCount)
      tValue.label = label
      tValue.value = value
      m_chartData(iCount) = tValue
  End Sub
  Public Sub SaveChart()
      On Error Resume Next
      Dim iSheet
      Dim i
      Set xl = New Excel.Application
      xl.Application.Workbooks.Add
      xl.Workbooks(1).Worksheets("sheet1").Activate
      If Err.Number <> 0 Then
          foundErr = True
          ErrMsg = Err.Description
          Err.Clear
      Else
          xl.Workbooks(1).Worksheets("sheet1").Cells("2,1").value = m_chartName
          For i = 1 To iCount
              xl.Worksheets("Sheet1").Cells(1, i + 1).value = m_chartData(i).label
              xl.Worksheets("Sheet1").Cells(2, i + 1).value = m_chartData(i).value
          Next
          xl.Charts.Add
          xl.ActiveChart.ChartType = m_chartType
          xl.ActiveChart.SetSourceData xl.Sheets("Sheet1").Range("A1:" & Chr((iCount Mod 26) + Asc("A")) & "2"), 1
          xl.ActiveChart.Location 2, "Sheet1"
          With xl.ActiveChart
              .HasTitle = True
              .ChartTitle.Characters.Text = m_chartName
          End With
          xl.ActiveChart.ApplyDataLabels 2, False, _
              True, False
          With xl.Selection.Border
              .Weight = 2
              .LineStyle = 0
          End With
              
          xl.ActiveChart.PlotArea.Select
          With xl.Selection.Border
              .Weight = xlHairline
              .LineStyle = xlNone
          End With
          xl.Selection.Interior.ColorIndex = xlNone
          
          xl.ActiveWindow.Visible = False
          
          xl.DisplayAlerts = False
      
          xl.ActiveChart.Export m_fileName, FilterName:="GIF"
          xl.Workbooks.Close
          If Err.Number <> 0 Then
              foundErr = True
              ErrMsg = ErrMsg
              Err.Clear
          End If
      End If
      Set xl = Nothing
  End Sub
  Private Sub Class_Initialize()
      iCount = 0
      foundErr = False
      ErrMsg = ""
      m_chartType = -4102 'xl3DPie
                    '54 '柱状图
  End Sub
  '------------------------------------------------------------------------------- 

  5. 如果实现柱状图?
    实际上前面的代码已经实现了柱状图的功能,只是缺省是饼图功能。调用代码改成如下:

  Dim obj
  Set obj = CreateObject("ChinaaspChart.pie")
  obj.AddValue "男", 150
  obj.AddValue "女", 45
  obj.AddValue "不知道", 15
  obj.ChartName = "性别比例图"
  obj.FileName = "d:/123.gif"
  obj.ChartType=54
  obj.SaveChart

   6. 在asp里面调用该组件画图并显示它需要注意的地方。
    (1)图片必须生成在web目录下。
    (2)asp程序运行在多用户环境下,必须加锁处理
     可以通过application实现。其逻辑如下:

 if application("标志")=0 then
    显示图片
   else
        application.lock
    生成图片
    显示图片
        application("标志")=0
       application.unlock
   end if
  当然何时需要生成图片置标志位,就需要您自己根据程序的要求来确定了。
  

总结:
  COM里面调用office组件是一个十分有用的技巧,它的优点是开发相对简单,使用方便,适合企业级低访问量,高业务要求的应用,缺点是占用系统资源高。
  程序在Windows 2000 Server + Office 2000 + VB6.0 上测试通过。

VB利用PictureBox控件播放GIF动画

'改了一下,限定图像缩放到Picture1的大小 '在PictureBox控件中显示GIF动画(图片),凡有句柄hwnd的窗体控件均可以 Option Explicit '调用运动图像播放类型库Q...
  • kajweb
  • kajweb
  • 2017年03月02日 23:30
  • 817

js使用echarts实现饼图报表

//html页面需要的结果 流量报告------------> class="acounts flow-report"> class="search-banner"> ...
  • liqi_q
  • liqi_q
  • 2016年11月04日 10:38
  • 660

Echarts入门,条形图,饼图(南丁格尔图)

1.引入js   2.准备一个dom,有id,长宽即可   3.初始化echarts实例 var myChart = echarts.init(document.getElement...
  • sinat_31516067
  • sinat_31516067
  • 2016年05月27日 17:52
  • 5165

android柱状图和饼状图的的实现

还是先看看效果图,免得浪费大家的时间 1.第三方框架有很多,这里采用的是MPAndroidChart,github链接下面 https://github.com/PhilJay/MPAndro...
  • wang891019
  • wang891019
  • 2016年11月14日 14:22
  • 1350

纯css3实现饼状图-------Day21

现代网站在商务应用中比较广泛
  • marSmile_tbo
  • marSmile_tbo
  • 2014年05月30日 00:54
  • 5091

jfreechart详解一饼形图

package com.xlk.jfreechart; import java.awt.Color; import java.awt.Dimension; import java.awt....
  • yangwangxlk
  • yangwangxlk
  • 2015年03月31日 11:44
  • 3108

MPAndroidChart开源图表库(一)之饼状图

MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。MPA...
  • shineflowers
  • shineflowers
  • 2015年03月28日 15:32
  • 59173

数据统计之饼图实现

数据统计之饼图实现原理是重写onDraw方法,根据饼图的特点以及点的坐标关系,绘制而成...
  • huangxuanheng
  • huangxuanheng
  • 2017年04月24日 10:21
  • 500

Android图表库MPAndroidChart(八)——饼状图的扩展:折线饼状图

标签: android扩展库布局 2016-11-22 14:03 2148人阅读 评论(6) 收藏 举报  分类: Android(110)  版权声明:本文为博...
  • u010854167
  • u010854167
  • 2016年12月09日 09:14
  • 723

ASP.NET 动态创建柱状图和饼图

第一步:创建一个新的ASP.NET项目。 打开Microsoft Visual Studio .NET,点击“文件(File)”-“新建(New)”-“项目(Project)”,打开“新建项目(Ne...
  • Goldxwang
  • Goldxwang
  • 2016年10月26日 18:49
  • 1617
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在vb组件内调用excel2000实现GIF饼图
举报原因:
原因补充:

(最多只允许输入30个字)