引言:
最近做了個Excel調用WebService數據集並顯示和打印的工具,在網上沒查到相關資料,摳出以下方法,希望it's useful。
前奏:
要在Excel中調用Web服務,首先需要安裝微軟工具Office Web Service Toolkit,傻瓜式安裝。
第二步就要添加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(); } }
接下來就是此隨筆的關鍵點了,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來訪問數據集中的各參數。
關於返回多條數據集,還未測試。