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

Posted

技术标签:

【中文标题】如何使用 Excel VBA 将项目添加到 Sharepoint 列表?【英文标题】:How to add items to a Sharepoint list using Excel VBA? 【发布时间】:2012-04-13 20:15:50 【问题描述】:

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

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 断开连接时遇到了一些问题,因此没有填充列表,并且通常希望简化我们的数据传输过程,我希望不使用 Access 直接将数据从 Excel 发送到 Sharepoint。我在 SO 上阅读了一些关于使用 Web 服务更新 Sharepoint 的内容,但我无法弄清楚这些是如何工作的,或者如何在 VBA 中实现它们。

我需要哪些关于我的 Sharepoint 列表的信息才能从 Excel VBA 操作它,类似于上面的代码?我需要添加任何参考资料吗?

【问题讨论】:

【参考方案1】:

您可以使用 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)

【讨论】:

使用VB的;我需要找到一个适用于 VBA 的解决方案。 好的,我明白了,但是 COM+ 仍然可以与 VBA 一起使用,对吧?【参考方案2】:

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

您可以用来访问列表网络服务的一个选项是“Microsoft SOAP Toolkit”,它必须作为办公组件安装(从未这样做过,但这里有一篇描述它的文章: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

【讨论】:

更好的方法是编写一个使用“添加服务引用”访问服务的 .NET 组件,然后将该组件公开为 COM 对象。这样,就不会使用过时的软件。 我最终使用 MSXML 库来执行此操作。很抱歉没有尽快将问题标记为已回答。

以上是关于如何使用 Excel VBA 将项目添加到 Sharepoint 列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VBA 将事件添加到运行时在 Excel 中创建的控件

如何使用 VBA 在 Excel 中正确添加表格列?

访问 VBA 如何将新工作表添加到 Excel?

VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项

Excel(VBA)哈希字符串使用SHA1-假名

使用VBA将VBA模块从Access项目导出到Excel项目