将文件上传到 SharePoint DocLib 的 VBScript [英] VBScript to Upload file to SharePoint DocLib
问题描述
我正在尝试自动将文件上传到 SharePoint 文档库.我遇到了无数帖子(在这个论坛和其他论坛上),但似乎无法得到一些有用的东西.虽然我做过一些简单的 VBA 和 VB 脚本,但我并不是真正的开发人员.
I'm trying to automate the uploading of files to a SharePoint document library. I've run across countless posts (on this forum and others) but can't seem to get something that works. I'm not really a developer, though I have done some simple VBA and VB Script.
我正在寻找的是一种将文件(特别是 .xlsx 和 .zip 类型)从本地计算机自动上传到特定 SharePoint 文档库的解决方案(让我们使用.../sharepoint/Metrics/Forms/AllItems.aspx"作为列表)使用 VBA 或 VB 脚本.
What I'm looking for is a solution to automatically upload a file (.xlsx and .zip types specifically) from a local machine to a specific SharePoint document library (let's use ".../sharepoint/Metrics/Forms/AllItems.aspx" as the list) using VBA or VB Script.
在研究这个问题时,这里有一些其他想法/评论,希望能帮助有人为我提供解决方案:
In researching the issue, here are some other thoughts/comments that hopefully will help someone in providing me a solution:
- 我无法更改 SharePoint 服务器上的任何内容
- 上传文件时我需要能够传递凭据
- 我只是在寻找 VBA/VBS 解决方案(没有 C# 或 .NET)
- 我可能上传时需要设置元数据
- I cannot change anything on the SharePoint server
- I need to be able to pass credentials when uploading the file
- I am only looking for VBA/VBS solutions (no C# or .NET)
- I might need to set metadata when uploading
在此先感谢您的帮助.
推荐答案
以下 VBScript 使用 FrontPage RPC 上传文件:
The following VBScript uploads a file using FrontPage RPC:
Function StringToByteArray(str)
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 2 ''adTypeText
stream.Charset = "ascii"
stream.WriteText str
stream.Position = 0
stream.Type = 1 ''adTypeBinary
StringToByteArray = stream.Read()
stream.Close
End Function
Sub UploadFile(sourcePath, siteUrl, docName, title, checkincomment, userName, password)
strHeader = "method=put+document%3a12.0.4518.1016" + _
"&service_name=%2f" + _
"&document=[document_name=" + Escape(docName) + _
";meta_info=[vti_title%3bSW%7c" + Escape(title) + "]]" + _
"&put_option=overwrite,createdir,migrationsemantics" + _
"&comment=" + _
"&keep%5fchecked%5fout=false" + vbLf
bytearray = StringToByteArray(strHeader)
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 1 ''adTypeBinary
stream.Write byteArray
Set stream2 = CreateObject("ADODB.Stream")
stream2.Open
stream2.Type = 1 ''adTypeBinary
stream2.LoadFromFile sourcePath
stream2.CopyTo stream, -1
stream.Position = 0
Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
xmlHttp.open "POST", siteUrl + "/_vti_bin/_vti_aut/author.dll", false, userName, password
xmlhttp.setRequestHeader "Content-Type","application/x-vermeer-urlencoded"
xmlhttp.setRequestHeader "X-Vermeer-Content-Type","application/x-vermeer-urlencoded"
xmlhttp.setRequestHeader "User-Agent", "FrontPage"
xmlHttp.send stream
If xmlHttp.status = 200 Then
If Instr(xmlHttp.responseText, "successfully") = 0 Then
MsgBox "ERROR: " & vbCrLf & xmlHttp.responseText
Else
''Checkin
strHeader = "method=checkin+document%3a12.0.4518.1016" + _
"&service_name=%2f" + _
"&document_name=" & Escape(docName) + _
"&comment=" + Escape(checkincomment) + _
"&keep%5fchecked%5fout=false" + vbLf
Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
xmlHttp.open "POST", siteUrl + "/_vti_bin/_vti_aut/author.dll", false, userName, password
xmlhttp.setRequestHeader "Content-Type","application/x-vermeer-urlencoded"
xmlhttp.setRequestHeader "X-Vermeer-Content-Type","application/x-vermeer-urlencoded"
xmlhttp.setRequestHeader "User-Agent", "FrontPage"
xmlHttp.send strHeader
End If
End If
If xmlHttp.status / 100 <> 2 Then
MsgBox "ERROR: status = " & xmlHttp.status & vbCrLf & xmlHttp.responseText
End If
End Sub
UploadFile "C:UsersmyusernameDesktopTest File.zip", _
"http://computername/Sites/sitename", _
"Requirements/Test File.zip", _
"Test title", _
"Test checkin comment", _
"MYDOMAINmyusername", "mypassword"
MsgBox "Done"
请注意,文件名只能由 ASCII 字符组成.否则,上述脚本将无法工作.
Please note that the file name should consist of ASCII characters only. Otherwise, the above script will not work.
这篇关于将文件上传到 SharePoint DocLib 的 VBScript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!