如何使用Excel VBA将项目添加到Sharepoint列表?

问题描述:

我有一个基于Excel的应用程序收集一些用户输入,并根据用户输入做出一些计算。应用程序本身不存储任何用户输入或计算;当前每当用户运行该应用程序时,它都会将数据发送到Access数据库,并将一行插入链接到Sharepoint列表的Access表xlTable。相关的代码是:如何使用Excel VBA将项目添加到Sharepoint列表?

sub sendToSharepoint(userName as string, folderPath as string, calculatedValue as long) 

dim db as DAO.database 
dim insertStr as string 

'open connection to Access db 
set db=OpenDatabase(myDatabasePath) 

'build insert string 
insertStr="insert into xlTable (userName,folderPath,calculatedValue,workDate) values (""" & userName & """,""" & folderPath & """," & calculatedValue & ","#" & Now & "#)" 

'insert values into xlTable, which adds them to the Sharepoint list 
db.execute insertStr,dbFailonError 

end sub 

因为我们已经有一些问题与Access从SharePoint断开,因此不填充列表,一般要简化我们的数据传输过程中,我想发送数据直接从Excel到Sharepoint而不使用Access。我已经阅读了关于使用Web Services更新Sharepoint的一些内容,但是我一直无法弄清楚它们是如何工作的,或者如何在VBA中实现它们。

我需要关于我的Sharepoint列表来处理Excel VBA中类似于上述代码的信息?我是否需要添加任何参考?

所有的数据操作都可以通过名为lists.asmx的SharePoint Lists Web service完成。您必须调用该Web服务。例如UpdateListItems method应该做MS Access现在做的事情。您可以使用访问列表中的网络服务队

一种选择,是“Microsoft SOAP工具包”,它必须被安装为Office组件(从来没有这样做,但这里是一篇文章描述它:http://oreilly.com/pub/h/1306

另一种选择是使用MSXML库(它总是可用的)并发送SOAP请求作为简单的HTTP请求,然后将结果解析为xml。有一篇文章展示了如何实现它的示例:http://blogs.msdn.com/b/jpsanders/archive/2007/06/14/how-to-send-soap-call-using-msxml-replace-stk.aspx

+0

更好的方法是编写一个使用“添加服务引用”访问服务的.NET组件,然后将此组件作为COM对象公开。这样,就不会使用过时的软件。 – 2012-04-14 17:40:11

+1

我结束了使用MSXML库来做到这一点。对不起,没有将问题标记为更快回答。 – sigil 2012-08-10 15:54:04

您可以使用Camelot .NET连接器使用随附于下一个版本(2.0)的COM +组件直接从VB/ASP查询SharePoint。请参阅http://bendsoft.com/net-sharepoint-connector/

'define connection string 
Dim connectionString 
connectionString = "Server=mysharepointserver.com;Database=sites/test;Domain=;User=xxxx;Password=xxxx;Authentication=Ntlm;TimeOut=50;RecursiveMode=RecursiveAll;DecodeName=True;NoListFilters=False;ExpandUserFields=False;StrictMode=true;DefaultLimit=1000" 

'activate connector com+ 
Dim connector 
Set Connector = CreateObject("Camelot.SharePointConnector.Com.Connector") 

' your query 
Dim sql 
sql = "insert into sharepointlist (userName, folderPath, calculatedValue, workDate) values ('" & userName & "', '" & folderPath & "', " & calculatedValue & ", '" & Now & "')" 

' execute query 
connector.ExecuteNonQuery(sql, connectionString) 
+0

这是使用VB;我需要找到一个从VBA起作用的解决方案。 – sigil 2012-04-25 16:37:07

+1

好吧,我明白,但COM +仍然可以用于VBA吗? – Ulf 2012-09-14 11:35:12