如何使用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
您可以使用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)
更好的方法是编写一个使用“添加服务引用”访问服务的.NET组件,然后将此组件作为COM对象公开。这样,就不会使用过时的软件。 – 2012-04-14 17:40:11
我结束了使用MSXML库来做到这一点。对不起,没有将问题标记为更快回答。 – sigil 2012-08-10 15:54:04