2017-03-05 278 views
2

一般信息。:我需要從Excel更新(添加/編輯)SharePoint列表。我可以用ListObject做到這一點,但這不是我們所通向的方向。使用Excel-VBA(MSXML2.XMLHTTP對象)更新SharePoint列表

讀完所有Google的可能性後,我想出了(也許我錯了),想用MSXML2.XMLHTTP對象來更新SharePoint列表。

當前問題:我的代碼運行一直到結束,我得到objXMLHTTP.Status = 200,但SharePoint列表未更新。

代碼

Option Explicit 

Const SharepointUrl As String = "http://share.corning.com/sites/ipp/PMOSandbox/" 
Const ListName As String = "{60CE6622-D25B-447A-BFBF-8F3DD5B9FCF0}" 
Const VIEWNAME As String = "{91ADBAE5-479F-4C80-A5FF-8EDA7A233B82}" 

Sub Add_Item() 

Dim objXMLHTTP As MSXML2.XMLHTTP  
Dim strListNameOrGuid As String 
Dim strBatchXml As String 
Dim strSoapBody As String  
Dim ValueVar As String, FieldNameVar As String 

Set objXMLHTTP = New MSXML2.XMLHTTP 

FieldNameVar = "IPP #" 
ValueVar = "Shai" 

'Add New Item'  
strBatchXml = "<Batch OnError='Continue'><Method ID='1' Cmd='New'><Field Name='" + FieldNameVar + "'>1004</Field>" + _ 
      "<Field Name='Title'>Uploaded from VBA</Field>" + _ 
      "<Field Name='Next KD Status'>" + ValueVar + "</Field>" + _ 
      "</Method></Batch>" 

objXMLHTTP.Open "POST", SharepointUrl + "_vti_bin/Lists.asmx", False 
objXMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8""" 
objXMLHTTP.setRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems" 

strSoapBody = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " _ 
& "xmlns:xsd='http://www.w3.org/2001/XMLSchema' " _ 
& "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><UpdateListItems " _ 
& "xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>" & ListName _ 
& "</listName><updates>" & strBatchXml & "</updates></UpdateListItems></soap:Body></soap:Envelope>" 

objXMLHTTP.send strSoapBody 

Do 
    ' wait for response 
Loop Until objXMLHTTP.Status = 200 

Set objXMLHTTP = Nothing 

MsgBox "Finished Running !" 

End Sub 
+0

也許使用ADO會是更好的選擇嗎?你可以用SQL語句更新表。 –

+0

@RyanWildry我很樂意提出建議,你如何實現它? –

+0

與ADO連接,請參閱:https://www.connectionstrings.com/sharepoint/ Microsoft ACE OLEDB 12.0部分,然後使用連接字符串更新表。看起來你已經有了GUID列表,你需要它來設置連接。 –

回答

1

下面是如何使用ADO做一個基本的輪廓。

Option Explicit 

Public Sub Update() 
On Error GoTo ErrHand 

    'Create the connection object with ADO 
    Dim conn  As Object: Set conn = CreateObject("ADODB.Connection") 

    'Write your update statement 
    Dim sql   As String 
    sql = "Update MyTable set Field1= 'A', Field2='B' Where MyID=1234" 

    'Open the connection and submit the update 
    'In my experience, credentials should be requested by the server - 
    'by way of a windows pop-up 
    With conn 
     .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;" & _ 
          "DATABASE=MySharePointURL;" & _ 
          "LIST={MyListGUID};" 
     .Open 
     .Execute sql 
    End With 

CleanExit: 
    If conn.State = 1 Then conn.Close: Set conn = Nothing 
    Exit Sub 

ErrHand: 
    Debug.Print Err.Number, Err.Description 
    GoTo CleanExit 
End Sub 
+0

感謝您的幫助,我明天將在工作中對其進行測試。在這種情況下,如何使用'sql'來更新2個字段(比如''下一個KD狀態「的值從''LA」'到'GA'',以及''狀態''從'GR' ''''YL'「),其中字段」IPP#「等於1002 –

+0

聽起來像是一個新的SO SQL問題。也許試着在Access/Excel中模擬你的環境來看看你需要做什麼。它幾乎聽起來像是where子句中的一些參數的更新語句。 –

+0

非常感謝,它的工作原理,現在只是圍繞着更新的SQL語法制定我的頭腦,你對SQL有好處嗎?我應該把鏈接發給我的新帖子嗎? –