VBA调⽤WebService
引⾔:
  最近做了个Excel调⽤WebService数据集并显⽰和打印的⼯具,在⽹上没查到相关资料,抠出以下⽅法,希望it's useful。
前奏:
要在Excel中调⽤Web服务,⾸先需要安装微软⼯具,傻⽠式安装。
第⼆步就要添加WebService引⽤,以中⽂版Office2010为例,Alt+F11,进⼊VBA界⾯,选择[⼯具]->[引⽤],勾选"Microsoft XML, v6.0",如下图所⽰。
第三步就是添加你需要调⽤的WebService服务了。选择[⼯具]->[Web服务引⽤],勾选"Web服务URL",然后将URL录⼊搜索并添加即可。
此步完成后,在⼯程视图的类模块下会出现"clsws_"开后的类⽂件,双击看下,正是我们所需要个⽅法(Happy⼀下)。当然这些操作在⽹上也是很常见的。
单返回值的调⽤:
如果Web服务返回单个数据,调⽤⽅法较为简单,代码如下,3⾏⾜以。
Dim ExampleVar As New clsws_GetCWBCPInfo
Dim strCWBNo As String
strCWBNo = ExampleVar.wsm_GetCWBNoForAustraliaLine("CAN", iCount)
返回单条数据集: 
因为我的Web服务是基于C#写的,返回DataTable之类的数据集⽆法被VBA解析,没办法,只能想辙变通⼀下。
我的解决⽅案是返回⼀个实体类,把数据集的各项转换成VBA所需的item⼦项。
先把实体类代码发出来,
namespace Entity
{
public class TB_CWB
{
public string cwb_no {get;set;}
......
public string Cnee_Address_JP {get;set;}
public void SetProperty(DataRow dr)
{
cwb_no = dr["cwb_no"].ToString();
......
Cnee_Address_JP = dr["Cnee_Address_JP"].ToString();
调用webservice服务}
}
接下来就是此随笔的关键点了,VBA的调⽤。
Dim cwbInfo As Object
Dim WS_GETCWBCPInfo As New clsws_GetCWBCPInfo
cwbInfo = WS_GETCWBCPInfo.wsm_GetCWBLabelInfoByJPCom(custBillNo, portName)
cwb_no = cwbInfo.Item(0).Text
ori = cwbInfo.Item(1).Text
pcs = cwbInfo.Item(2).Text
consignee_postcode = cwbInfo.Item(3).Text
Sagawa_POSTCODE1 = cwbInfo.Item(4).Text
是的,通过Object.Item来访问数据集中的各参数。 
关于返回多条数据集,还未测试。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。