??xml version="1.0" encoding="utf-8" standalone="yes"?> VB6中如何用C#开发的WebServiceq行开?/font> 在项目开发过E中Q我们需要集成已有的权限理pȝQ作为它本n的权限控制的模块。但是已有的权限理pȝ是采?/span>C#开发的Q提供了WebService的权限访问接口,而开发项目是使用VB6开发的Q两者可以互相沟通么Q如果可以,如何才能实行?/span>VB6中获?/span>WebService中的信息呢? Microsoft Office XP Web Services Toolkit 2.0Q下载地址Q?/span>http://www.microsoft.com/downloads/details.aspx?familyid=4922060F-002A-4F5B-AF74-978F2CD6C798&displaylang=en Q,该工h供给开发者在VBA中快速访问和使用WebService的功能,使用几乎和在VS.NET中?/span>WebServcie一h便,真是很爽?/span> Office XP Web Services Toolkit 2.0安装界面 安装?/span>Office XP Web Services Toolkit 2.0之后Q打开你的Office2003套g中Q一个,按快捷键Q?/span>Alt + F11Q或者菜单【工兗【宏】?/span>VisualBasic~辑器】菜单进入,如下所C:(x) 在弹出的VBAE序H口中,选择【工兗?/span>Web引用】的菜单,如下所C?br />
生成的代码如下所C,其中包含?/span>WebService对应的代理类和相关的实体c,q有一个工厂类?br />
在代码文件上使用右键菜单导出生成的代码文Ӟ加入你的VB6工程文g中,如下所C?/span> ?/span>VB6工程的引用中加入MSSOAP30.DLL?/span>MSXML3.DLLq两个引用的DLLQ请先安?/span>SOAP Toolkit 3.0Q地址Q?/span>http://www.microsoft.com/downloads/details.aspx?familyid=c943c0dd-ceec-4088-9753-86f052ec8450&displaylang=en Q,如图所C:(x)
http://zhidao.baidu.com/question/43875593.html?si=1
flash发送数据到容器 javascript(面向|页)中一般推荐?nbsp; flash.external.ExternalInterface.call
但在VB(或其它的语言?Q一般徏议用fscommand(command, args)q种方式来通讯 Q?/span>
在VB端(其它?yu)是ZshockwaveFlash控g的内部事?其它VC DelphicdQ?/span>
有一个这L(fng)针对swf 控g的事件处理子q程
Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
'具体看看形参q?如何?nbsp; flash中的 fscommand函数格式对应?/span>
Select Case command
Case "play"
Case "stop"
End Select
End Sub
flash -> VB的通讯 像上面q样
通过 select case 来判断分支多个command的操?/span>
而重要的?VB -> flash斚w的?/span>
一般的SetVariableq种Ҏ(gu) 或?使用 flashVars来传入参敎ͼ都是Z很被动的方式动作Q即讄了?Q如果flash斚w不主动检的话,׃?x)引发其它相关的动?/span>
所以一般推荐用基于事件处理的 callFunction方式
swf控g.callFunction xml格式数据
xml格式数据的构成是
<invoke name="flash里面的侦听名" returntype="xml"><arguments><string>数据</string></arguments></invoke>
要发送的数据需要?<数据cd></数据cd> 包裹
相关的类型说明详?/span> http://www.cnblogs.com/maconel/archive/2010/09/29/1838743.html
但一般用默认的Stringp够了 包括数值数据也可以用它发?/span>
q是最基本的数据格?nbsp; 卛_以这样写
swf控g.callFunction <invoke name=""flash里面的侦听名""returntype=""xml""><arguments><string>数据</string></arguments></invoke>
'<string>数据</string> q里讄要发送的字符数据
而flash斚w要写的as代码
as2:
flash.external.ExternalInterface.addCallback("flash里面的侦听名",this, funcCall);
function funcCall(str1:String):Void{
//q里的str1对应W一个参?nbsp; 是 数据
//如果有多个参?依次在这里Ş参声?/span>
//传入的数据可以在flash里Q意处?/span>
}
as3:
//as2和as3中的 ExternalInterface对象?nbsp; addCallback函数原型有所不同 q里不用dthis指向
flash.external.ExternalInterface.addCallback("flash里面的侦听名", funcCall);
function funcCall(str1:String):void{
//q里的str1对应W一个参?nbsp; 是 数据
//如果有多个参?依次在这里Ş参声?/span>
}
q里Z方便 整理Z个vb端的发送代?直接调用装好的Ҏ(gu)可以发送数?/span>
代码:
Private Sub Form_Load()
ShockwaveFlash1.Movie = App.Path & "\as2.swf"
'下面q是必须的格?nbsp; 使用 getStr函数Z入的字符串两边加?lt;String></String>
'getCallFuncStr函数为已l格式好?参数Ҏ(gu)加上头尾的xml格式声明
'CWScallFunc 重构调用swf控g的方?z֏数据
Dim str As String
str = getStr("strUsername") & getStr("strUserid") 'q里传入两个参数
CWScallFunc ShockwaveFlash1, getCallFuncStr("UserData", str)
End Sub
Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
Select Case command
Case "trace"
MsgBox args
End Select
End Sub
Private Function getStr$(v$)
'旉关系 q里只设|默认的string 如有更多数据cd需?可参看http://www.cnblogs.com/maconel/archive/2010/09/29/1838743.html
'自行扩展
getStr = IIf(v <> "", "<string>" & v & "</string>", "")
End Function
Private Function getCallFuncStr$(FuncName$, Optional v$ = "")
'=======此参?nbsp; FuncName$需与flash端侦听名同步
Dim strXmlop, strXmled As String
strXmlop = "<invoke name=""" & FuncName & """returntype=""xml""><arguments>" '定义XML开始语?name 后定义调用函数名
strXmled = "</arguments></invoke>"
getCallFuncStr = strXmlop & v & strXmled
End Function
Private Sub CWScallFunc(obj As ShockwaveFlash, v$)
'重构
obj.CallFunction v
'如果?callfunction IShockwaveFlash p| 基本没救了 flash10的问?br style="word-wrap: break-word; line-height: normal; " />
End Sub
]]>1. 问题描述
2. 解决Ҏ(gu)
2.1. 使用Microsoft Office XP Web Services Toolkit 2.0创徏代理c?/span>
q入VBA?/span>Office工具菜单
在弹出的对话框中选择“Web服务URL”,输入WebService?/span>URLQ如Q?/span>http://localhost/HWSecurity/WebServices/Security.asmx Q点?yn)L索,则在对话框的右上角列?/span>WebService的方法,选择所有的Ҏ(gu)Q单?yn)L?#8220;d”卛_?/span>VBA代码中加入了WebService的代理类{相应的代码Q如下所C?/span>
VBA中添?/span>WebService引用的对话框
WebService生成?/span>VBA代理cR实体类{代码文?/span>2.2. 如何使用VBA生成的代理类和实体类{?/span>
导出VBA代码文g
在代码中使用WebService的代理类的时候,?x)有提示的,使用h非常方便Q如下所C,以看到在代码?/span>WebService代理c获取数据是多么的方ѝ?br />
使用WebService代理c获取返回字W串Ҏ(gu)和实体类数组代码CZ如下所C?br />
]]>
更多的时候,我都在用COMlg来扩展ASP的功能。准地_(d)是服务端q行的Activex Dlllg。用Server.CreateObject(“工程?cd”)卛_完成对组件的调用。这U方式问题很?只要lg中以PUBLIC对外暴露Ҏ(gu)既可。但是,有时候我们必M用ACTIVEX 控g(*.OCX)嵌入到网中执行来获取客L(fng)的信息。这有了许许多多的一些问题?
q是我们需要解决的N个问?从简单到?
1Q?如何从服务端获取数据Q传递到ActiveX控g中?
1Q?初始化时使用参数l定
2Q?q行时得到数?
2Q?ActiveX控g得到客户端的信息Q如何传递到服务端?
3Q?安全?
1Q?数字{
2Q?使用IOBJSAFE接口
好了Q我们开始实例学?fn)?
q个功能演示了如何制作一个简单的控g,q嵌入网中执行?工作环境:WINXP+VB6+IE6
我的IE安全讄为安全?中。所有的Activex选项设ؓ(f)启用?
打开vb6,新徏ActiveX控g工程?
工程?fOcxQ用h件名:UC1
Z方便Q我们用ActiveX控g接口向导…,菜单->外接E序->外接E序理?>VB 6 ActiveX控g接口向导。确定即可?
打开ActiveX控g接口向导Q下一步,对于可用名称和选定名称我们默认下一步,新徏自定义成员,GetInfocd:属性,下一步,共有Ҏ(gu)中选择我们刚才d的GetInfo,映射到控仉择TxtInfo,成员选择Text,下一步直到完成。代码窗口中?x)生成一些我们不需要的Q删除,剩下的代码如下:(x)
Option Explicit
'注意Q不要删除或修改下列被注释的行!
'MappingInfo=txtinfo,txtinfo,-1,Text
Public Property Get GetInfo() As String
GetInfo = txtinfo.Text
End Property
Public Property Let GetInfo(ByVal New_GetInfo As String)
txtinfo.Text() = New_GetInfo
PropertyChanged "GetInfo"
End Property
'从存贮器中加载属性?
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
txtinfo.Text = PropBag.ReadProperty("GetInfo", "Text1")
End Sub
'属性值写到存储器
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("GetInfo", txtinfo.Text, "Text1")
End Sub
OK,好了Q我们编译成fOcx.ocx文gQ然后F5直接q行,VB?x)打开一个测试页。如下:(x)
E:Program FilesMicrosoft Visual StudioVB98UC1.html
同时Q打开你的IE览?看到了吧Q你做的控g出现在了q个试中?
你可以打开试,可以看到ClsID,比如Q?90D1028-298B-45CF-9A64-6ED5A5BACBC9
因ؓ(f)VB~译的时候已l完成注?所以无法模拟客L(fng)没有安装该控件时出现的提C? 我们l箋
使用regsvr32 F:csdn_vbcom+_activeXsample1fOcx.ocx –u卸蝲
或?打开注册?在HKEY_CLASSES_ROOTCLSID下面扑ֈ 890D1028-298B-45CF-9A64-6ED5A5BACBC9?删除?当然q种方式q有存在而没有删除干净.
此时览http://yang/uc1.htm,׃IE中ActiveX讄为启动,所以,控g?x)显C出来?
下蝲后的ocx到哪里去?br />
打开该目?可能有所不同)E:WINDOWS.0Downloaded Program Files,看到了吧,fOcx.UC1文g在这个目录下.
原理:客户端下载该控g?自动注册,然后攑֜上述q个目录?q时我们可以打开注册表看看CLSID,呵呵,q是以前的那?
我们可以右键看看fOcx.UC1的属?看看相关内容,q里昄了该OCX所依赖的所有文?所?你的OCX量减少使用高控g或者第三方的控?否则,下蝲有些问题了.
如果IE中关于ActiveX的选项设ؓ(f)用,那么览器就?x)出现对话?#8221;当前安全讄止q行该页中的ActiveX控g.因此可能无法正确昄该页”Q这个就需要其他的方式来处理了?
一般用户默认的都是用ActiveX选项,所以让用户自己讄不太合适?br />
我们来看看如何从服务端获取数据,传递到ActiveX控g中?
1Q?初始化时使用参数l定
2Q?q行时得到数?
打开vb6,新徏ActiveX控g工程?
工程?fOcxQ用h件名:UC2
Z方便Q我们用ActiveX控g接口向导…,菜单->外接E序->外接E序理?>VB 6 ActiveX控g接口向导。确定即可?
打开ActiveX控g接口向导Q下一步,对于可用名称和选定名称我们默认下一步,新徏自定义成员,GetInfocd:属性,下一步,共有Ҏ(gu)中选择我们刚才d的GetInfo,映射到控仉择TxtInfo,成员选择Text,下一步直到完成。代码窗口中?x)生成一些我们不需要的Q删除,
'注意Q不要删除或修改下列被注释的行!
'MappingInfo=txtinfo,txtinfo,-1,Text
Public Property Get GetInfo() As String
GetInfo = txtinfo.Text
End Property
Public Property Let GetInfo(ByVal New_GetInfo As String)
txtinfo.Text() = New_GetInfo
PropertyChanged "GetInfo"
End Property
Private Sub Command1_Click()
Label2.Caption = GetInfo()
End Sub
'从存贮器中加载属性?
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
txtinfo.Text = PropBag.ReadProperty("GetInfo", "Text1")
End Sub
'属性值写到存储器
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("GetInfo", txtinfo.Text, "Text1")
End Sub
~译成OCX控g.q行生成的测试页.Text中默认的是Text1 如何服务器端的数据传递给OCX? 使用Microsoft ActiveX Control Padq个工具,可以很容易找? 直接用这个工h试|开.
菜单->Edit->Edit Activex Control,呵呵,打开了一个可视化的界?
看到了吧,有一个属性框,我们可以q行讄Q设|完成以后的代码如下Q?
增加了ID,ID是我们用来讉K的标?q有我们的属性GetInfo,我们也设定初始g 好了,q行. Text中就出现了我们设定的?#8221;q是ocx得到的客L(fng)d器的信息”
我们把上边的面Ҏ(gu)asp?看代?
OK,q行卛_
我们看看W二U情?
q行时得到数?
q行?点击按钮卛_看到效果.
问题提出:
ActiveX控g得到客户端的信息Q如何传递到服务??? 一U方法就是得到值后,使用Get,Post方式提交,q可能也是最常用?
有没有更好一些的Ҏ(gu)? 能不能在控g中直接向服务器发求而得到数据呢?
打开vb6,新徏ActiveX控g工程?
工程?fOcxQ用h件名:UC3
d1个按钮,2个文本框
代码如下Q?
Option Explicit
Private Sub Command1_Click()
'注意字符串和数字的写法有些区?
'使用AsyncRead通过HTTP发送你的请?
UserControl.AsyncRead "http://yang/xml/activex.asp?s1=" &am ... nbsp;& "", vbAsyncTypeByteArray
UserControl.AsyncRead "http://yang/xml/activex.asp?s1=" & Text1.Text, vbAsyncTypeByteArray
End Sub
'AsyncReadComplete 事g用来从asp面接受和分析?
'当容器刚完成一个异步读取请求时 , 发生该事?
'AsyncProp 中的数值指定了已完成的某个异步数据dh,
'它与前一?AsyncRead Ҏ(gu)调用中的数据匚w?
'AsyncReadComplete 事gq程中应包含错误处理代码Q因为错误状态会(x)l止下蝲?
'如果发生了这U情况,当访?AsyncProperty 对象?Value 属性时会(x)发生错误?
Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
On Error GoTo errhandle
Text2.Text = ByteArrayToString(AsyncProp.Value)
errhandle:
Err.Raise 601, "异步d发生了错?, Err.Description
End Sub
'字节数l{换成字符?
Public Function ByteArrayToString(bytArray() As Byte) As String
Dim sAns As String
sAns = StrConv(bytArray, vbUnicode)
ByteArrayToString = sAns
End Function
我们来看看http://yang/xml/activex.aspq个文g
很简单,使用request接受参数,responseq回?
q个例子可以q一步处理,服务器名以属性的方式传递给控g?
比如Q?
然后在程序中得到Q就可以使用了,如:(x) UserControl.AsyncRead "http://192.168.0.1/xml/activex.asp?s1=" ... t & "", vbAsyncTypeByteArray
然后在程序中得到可以灵zd理了?
]]>
regsvr32 d:\my.dll
set obj=set obj=Server.CreateObject("my.aspdll")
ASP调用未注册DLL:
<% @ language="vbscript" %>
<!--METADATA TYPE="typelib" FILE="d:\my.dll"-->
set obj=set obj=Server.CreateObject("my.aspdll")
不注册调用的DLL必须是物理\?
虽然ASP.NET代码装Ҏ(gu)很好Q完全可以取代ASPQ但是用惯了ASPQ而且对一些小目也不惛_用到.NETq个傍然大物Q因为电(sh)脑性能跟不上,所以还是存在ASP装的种U问题,l过多次试验Q对转换成DLL的过E写下一些心得:(x)
1、代码和DLL的区?/p>
DLL代码前要加上以下一D,目的是引用ASP五大对象Q?br />
Private Context As ScriptingContext
Private Application As Application
Private Response As Response
Private Request As Request
Private Session As Session
Private Server As Server
Public Sub OnStartPage(PassedScriptContext As ScriptingContext)
Set Context = PassedScriptContext 'Aspq行环境对象
Set Application = Context.Application 'Asp 五大对象
Set Request = Context.Request
Set Response = Context.Response
Set Server = Context.Server
Set Session = Context.Session
End Sub
2、部件引?/p>
要引用MicroSoft Active Server Pages Objects Library
如果DLL里也装了数据库q接(Connections)和数据集(RecordSet)QDLL工程可以使用原来ASP里的数据库写法,也可以通过以下引用部g的方法实玎ͼ(x)MicroSoft ActiveX Data Objects 2.7 Library
同时把原ASPE序里的Server.CreateObject("ADODB.CONNECTION")Ҏ(gu)下面样子Q加在代码头?br />
Public conn As New ADODB.connection
Public rs As New ADODB.Recordset
另外Q程序结束时要记得关闭连接,免得占用pȝ资源Q媄响服务器q行.
Set rs = Nothing
rs.Close
Set conn = Nothing '连接设为空Q释攑֮所占用的资源?br />
conn Close '连接关?无释放连接所占用的资?
3、DLL调试
按常规办法,l常要操作重启IIS,很烦Q最单的办法Q写一个BAT命o(h)保存成sss.batQ放在桌面上Q每ơ修改完DLL之前q行一ơ,然后在VB6里生成DLL,可以运行程序了Q不需要再注册一ơDLL,Z么?我也不清楚:(x)
regsvr32 E:VBvbdllmy.dll -u
net stop "world wide web publishing service"
net Start "world wide web publishing service"
4、改变ASP脚本~写?fn)?br /> 一般我?x)先写一个普通的ASPE序Q运行成功需交付客户时才转换成DLL,q时Q要注意ASP代码~写时把E序代码和HTML分成明显的两部分Q不要在一起ؕp糟的{换时要花很多_֊M改和整理?/p>
5、其它。。。(惛_再写Q?/p>
---?本文转摘自『IT学习(fn)者?#8594; http://www.itlearner.com/article/2087
<HTML>
<BODY>
<INPUT id=button1 name=button1 type=button value=Button>
<SCRIPT LANGUAGE="VBScript">
sub button1_onclick()
' Launch Excel
dim app
set app = createobject("Excel.Application")
' Make it visible
app.Visible = true
' Add a new workbook
dim wb
set wb = app.workbooks.add
' Fill array of values first...
dim arr(19,9) ' Note: VBScript is zero-based
for i = 1 to 20
for j = 1 to 10
arr(i-1,j-1) = i*j
next
next
' Declare a range object to hold our data
dim rng
set rng = wb.Activesheet.Range("A1").Resize(20,10)
' Now assign them all in one shot...
rng.value = arr
' Add a new chart based on the data
wb.Charts.Add
wb.ActiveChart.ChartType = 70 'xl3dPieExploded
wb.ActiveChart.SetSourceData rng, 2 ' xlColumns
wb.ActiveChart.Location 2, "Sheet1" 'xlLocationAsObject
' Rotate it around...
for i = 1 to 360 step 30
wb.activechart.rotation = i
next
' Give the user control of Excel
app.UserControl = true
end sub
</SCRIPT>
</BODY>
</HTML>
启动你的VB,选择ActiveX图标.q个图标可以在新建工E找?VB?x)提供一个默认的工程?project1)和类?class1).我们?x)将q两个名字都Ҏ(gu).在改名之?请首先确认我们拥有Microsoft Active Server Pages Object Library,它在我们的程序非常有?从菜单中选择"工程",然后在其中选择"引用",׃(x)出现"引用"H口
从中选择Microsoft Active Server Pages Object Library.
首先在vb中徏一个类文g:工程?exp
代码:
Dim MyApplication As Application
Dim MyRequest As Request
Dim MyResponse As Response
Dim MyServer As Server
Dim MySession As Session
Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyApplication = MyScriptingContext.Application
Set MyRequest = MyScriptingContext.Request
Set MyResponse = MyScriptingContext.Response
Set MyServer = MyScriptingContext.Server
Set MySession = MyScriptingContext.Session
End Sub
Public Sub OnEndPage()
Set MyScriptingContext = Nothing
Set MyApplication = Nothing
Set MyRequest = Nothing
Set MyResponse = Nothing
Set MyServer = Nothing
Set MySession = Nothing
End Sub
Public Sub hellow()
MyResponse.Write ("Hello World")
End Sub
Public Sub google()
MyResponse.Write ("ssssssssssss")
End Sub
说明:ScriptingContext传送给我们的对象请我们使用.q个ScriptingContext包括了全部的ASPҎ(gu)和属?实现?q得我们有能力讉K所有ASP的对?/p>
当然q里q有一步就是生成exp.dll文g?生成之后可以用 regsvr32 d:/vb-asp/exp.dll 注册?(很生?
asp面:
<%@ Language=VBScript%>
<HTML>
<HEAD>
<TITLE>Example 1</TITLE>
</HEAD> <BODY>
<%
dim Obj
Set Obj = Server.CreateObject("exp.aspdll")
Obj.hellow
response.write("<br>")
Obj.google
%>
</BODY>
</HTML>
说明:
Set Obj = Server.CreateObject("exp.aspdll") 其中,exp为工E名,aspdll为类?Set Obj = Server.CreateObject("工程?cdU?)
试通过.
===========================================================
对于更复杂的q用,大家可以通过q个实例向外扩展可以了.
?
Public Sub connstr2()
Set conn = MyServer.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & MyServer.MapPath("codata.mdb")
Set rs = conn.Execute("select * from news")
Do While Not rs.EOF
MyResponse.Write (rs("news_title") & "<br>")
rs.MoveNext
Loop
rs.Close
Set conn = Nothing
End Sub
q个是用数据库连接的代码装,当然q里要添加ADO引用?/p>
文章出处Q飞诺网(www.firnow.com):http://dev.firnow.com/course/4_webprogram/asp/aso_js/20071226/94440_2.html
正文
一、 环境配置
服务器端的环境配|从参考资料上看,微Ypd的配|应该都行,卻I(x)
1QWin9x+PWS+Office
2QWin2000 Professional+PWS+Office
3QWin2000 Server+IIS+Office
目前W者测试成功的环境是后二者。Office的版本没有特D要求,考虑到客h配置的不定性和下兼容特性,服务器端Office版本不要太高Q以防止客户Z载后无法正确昄?br />
服务器端环境配置q有两个偶然的发现是Q?br />
1Q W者开发机器上原来装有金山的WPS2002Q结果Excel对象创徏始终出现问题Q卸载WPS2002后,错误消失?br />
2Q W者开发ASP代码喜欢用FrontPageQ结果发现如果FrontPage打开Q服务器端)Q对象创建出CE_现象Q时而成功时而不成功。扩展考察后发玎ͼOfficepd的Y件如果在服务器端q行Q则Excel对象的创建很难成功?br />
服务器端q必要讄的一Ҏ(gu)COMlg的操作权限。在命o(h)行键?#8220;DCOMCNFG”Q则q入COMlg配置界面Q选择Microsoft Excel后点d性按钮,三个单选项一律选择自定义,~辑中将Everyone加入所有权限。保存完毕后重新启动服务器?br />
客户端的环境配置没发C么特别讲I的地方Q只要装有Office和IE卛_Q版本通用的好象都可以?/p>
二、 ASP对Excel的基本操?br />
1、 建立Excel对象
set objExcelApp = CreateObject("Excel.Application")
objExcelApp.DisplayAlerts = false 不显C?br />
objExcelApp.Application.Visible = false 不显C界?br />
2、 新徏Excel文g
objExcelApp.WorkBooks.add
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
3、 d已有Excel文g
strAddr = Server.MapPath(".")
objExcelApp.WorkBooks.Open(strAddr & "\Templet\Table.xls")
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
4、 另存Excel文g
objExcelBook.SaveAs strAddr & "\Temp\Table.xls"
5、 保存Excel文g
objExcelBook.Save Q笔者测试时保存成功Q页面报错。)
6、 退出Excel操作
objExcelApp.Quit 一定要退?br />
set objExcelApp = Nothing
三、 ASP操作Excel生成数据?br />
1、 在一个范围内插入数据
objExcelSheet.Range("B3:k3").Value = Array("67", "87", "5", "9", "7", "45", "45", "54", "54", "10")
2、 在一个单元格内插入数?br />
objExcelSheet.Cells(3,1).Value="Internet Explorer"
3、 选中一个范?br />
4、 单元格左边画_线?br />
5、 单元格右边画_线?br />
6、 单元g边画_线?br />
7、 单元g边画_线?br />
8、 单元D定背景色
9、 合ƈ单元?br />
10、 插入?br />
11、 插入?/p>
四、 ASP操作Excel生成Chart?br />
1、 创徏Chart?br />
objExcelApp.Charts.Add
2、 讑֮Chart囄c?br />
objExcelApp.ActiveChart.ChartType = 97
注:(x)二维折线图,4Q二l饼图,5Q二l柱形图Q?1
3、 讑֮Chart图标?br />
objExcelApp.ActiveChart.HasTitle = True
objExcelApp.ActiveChart.ChartTitle.Text = "A test Chart"
4、 通过表格数据讑֮囑Ş
objExcelApp.ActiveChart.SetSourceData objExcelSheet.Range("A1:k5"),1
5、 直接讑֮囑Ş数据Q推荐)
objExcelApp.ActiveChart.SeriesCollection.NewSeries
objExcelApp.ActiveChart.SeriesCollection(1).Name = "=""333"""
objExcelApp.ActiveChart.SeriesCollection(1).Values = "={1,4,5,6,2}"
6、 l定Chart?br />
objExcelApp.ActiveChart.Location 1
7、 昄数据?br />
objExcelApp.ActiveChart.HasDataTable = True
8、 昄图例
objExcelApp.ActiveChart.DataTable.ShowLegendKey = True
五、 服务器端Excel文g览、下载、删除方?br /> 览的解x法很多,“Location.href=”Q?#8220;Navigate”Q?#8220;Response.Redirect”都可以实玎ͼ用客L(fng)的方法,原因是给服务器更多的旉生成Excel文g?br /> 下蝲的实现要ȝ一些。用|上现成的服务器端下载组件或自己定制开发一个组件是比较好的Ҏ(gu)。另外一U方法是在客L(fng)操作ExcellgQ由客户端操作服务器端Excel文g另存臛_L(fng)。这U方法要求客L(fng)开放不安全ActiveX控g的操作权限,考虑到通知每个客户服务器讄为可信站点的ȝE度q是用第一个方法比较省事?br /> 删除Ҏ(gu)׃部分l成Q?br /> AQ 同一用户生成的Excel文g用同一个文件名Q文件名可用用户IDhSessionIDL(fng)可确信不重复字符串组成。这h文g生成时自动覆盖上一文g?br /> BQ 在Global.asa文g中设|Session_onEnd事gȀ发时Q删除这个用L(fng)Excel暂存文g?br /> CQ 在Global.asa文g中设|Application_onStart事gȀ发时Q删除暂存目录下的所有文件?br /> 注:(x)目录l构 \Src 代码目录 \Templet 模板目录 \Temp 暂存目录
六、 附录
出错时Excel出现的死q程出现是一件很头疼的事情。在每个文g前加?#8220;On Error Resume Next”有助于改善q种情况Q因为它?x)不文件是否生错误都坚持执行?#8220;Application.Quit”Q保证每ơ程序执行完不留下死q程?
以上摘自 http://blog.sendsong.cn
文章出处Q飞诺网(www.firnow.com):http://dev.firnow.com/course/4_webprogram/asp/aso_js/20071021/78720.html