网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.复本操作的对象、属性和方法(1)-.
.VB创建位图菜单.
.用VB实现文件查找功能.
.如何用VB建立快捷方式.
.把符串中的一子串替换为另一子串.
.利用IE控件访问Internet.
.用VB创建复杂表格.
.VB6在拖托盘中写入应用程序图标.
.VB入门之“HelloWorld”.
.用类来编写数据库程序.
.用VB5直接控制Excel97.
.用VB捕捉屏幕图象.
.VB6内置的内码转换功能.
.在VB中播放AVI文件.
.ADO简介.
.快速开发多媒体Web.
.VB中使用DDE技术为应用程序增辉.
.浅谈用VB6.0编写BO程序.
.VisualBasic影音控制.
.在VB6.0中播放GIF动画.

在VB组件内调用Excel2000实现GIF饼图

发表日期:2006-2-27


当我第一次使用excel的时候,就为excel的图表功能所倾倒,实在强大,并且那些图也挺漂亮了。后来我尝试着在vb里面调用excel所支持的vba功能,发现功能的确强大,就是十分繁琐。后来就考虑用vb在excel外面包一层,写成对象,去掉我们不需要的特性。这样掉用起来就方便多了,所谓一劳永逸:P。
  在这里,我将像大家介绍一个用vb编写的饼图组件,你只需要给它几个简单的参数,就可以生成一副GIF格式的图片给你。调用例子如下:

Dimobj
Setobj=CreateObject("ChinaaspChart.pie")
obj.AddValue"男",150
obj.AddValue"女",45
obj.AddValue"不知道",15
obj.ChartName="性别比例图"
obj.FileName="d:\123.gif"
obj.SaveChart
  除了在vb里面可以调用,这段代码同样也可以在asp里面调用。

  下面请followme编写我们的组件。
  1.Newproject,请选择activexdll,在projectexplorer面板上选择project1,然后在属性面板上修改其name为ChinaASPChart。同样把里面的classmodules修改为pie

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

  3.菜单project,选择菜单项References,然后请把MicrosoftActiveServerPagesOjbectLibrary、MicrosoftExcel9.0ObjectLibrary、COM ServicesTypeLibrary选上。
注意:在NT4/win98上没有COM ServiceTypeLibrary这个东东,应该选MicrosoftTransactionServerTypeLibrary

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


注释:-------------------------------------------------------------------------------
Dimxl
Dimm_chartName
Dimm_chartData()
Dimm_chartType
Dimm_fileName
PublicErrMsg
PublicfoundErr
DimiCount
Typem_Value
labelAsString
valueAsDouble
EndType
DimtValueAsm_Value
PublicPropertyLetChartType(ChartType)
m_chartType=ChartType
EndProperty
PublicPropertyGetChartType()
ChartType=m_chartType
EndProperty

PublicPropertyLetChartName(ChartName)
m_chartName=ChartName
EndProperty
PublicPropertyGetChartName()
ChartName=m_chartName
EndProperty
PublicPropertyLetFileName(fname)
m_fileName=fname
EndProperty
PublicPropertyGetFileName()
FileName=m_fileName
EndProperty

PublicSubAddValue(label,value)
iCount=iCount 1
ReDimPreservem_chartData(iCount)
tValue.label=label
tValue.value=value
m_chartData(iCount)=tValue
EndSub
PublicSubSaveChart()
OnErrorResumeNext
DimiSheet
Dimi
Setxl=NewExcel.Application
xl.Application.Workbooks.Add
xl.Workbooks(1).Worksheets("sheet1").Activate
IfErr.Number<>0Then
foundErr=True
ErrMsg=Err.Description
Err.Clear
Else
xl.Workbooks(1).Worksheets("sheet1").Cells("2,1").value=m_chartName
Fori=1ToiCount
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.SetSourceDataxl.Sheets("Sheet1").Range("A1:"&Chr((iCountMod26) Asc("A"))&"2"),1
xl.ActiveChart.Location2,"Sheet1"
Withxl.ActiveChart
.HasTitle=True
.ChartTitle.Characters.Text=m_chartName
EndWith
xl.ActiveChart.ApplyDataLabels2,False,_
True,False
Withxl.Selection.Border
.Weight=2
.LineStyle=0
EndWith

xl.ActiveChart.PlotArea.Select
Withxl.Selection.Border
.Weight=xlHairline
.LineStyle=xlNone
EndWith
xl.Selection.Interior.ColorIndex=xlNone

xl.ActiveWindow.Visible=False

xl.DisplayAlerts=False

xl.ActiveChart.Exportm_fileName,FilterName:="GIF"
xl.Workbooks.Close
IfErr.Number<>0Then
foundErr=True
ErrMsg=ErrMsg
Err.Clear
EndIf
EndIf
Setxl=Nothing
EndSub
PrivateSubClass_Initialize()
iCount=0
foundErr=False
ErrMsg=""
m_chartType=-4102注释:xl3DPie
注释:54注释:柱状图
EndSub
注释:-------------------------------------------------------------------------------

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

Dimobj
Setobj=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实现。其逻辑如下:

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


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

上一篇:VB与MS-Draw开发通用作图软件 人气:3650
下一篇:插入对象 人气:3149
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐