Excel 将文件上载到SharePoint,不使用UNC或驱动器映射
我正在尝试使用Excel中的VBA将文件上载到SharePoint 我找到了一些urlmon代码,解决了文件下载问题 我看到过使用UNC、winhttp POST和SEND以及SP SDK编写脚本的代码,但由于站点和软件安装的限制,我无法使后者正常工作 我需要直接上传,例如发送到“http://example.com/foldername". 我尝试将Scripting.FileSystemObject与URL一起使用 我大胆地假设,除了UNC和winhttp POST/SEND之外,还有一种VBA方法用于将文件上载到SharePoint 我尝试过的代码,是从其他人关于堆栈溢出的工作中复制的Excel 将文件上载到SharePoint,不使用UNC或驱动器映射,excel,vba,sharepoint,upload,Excel,Vba,Sharepoint,Upload,我正在尝试使用Excel中的VBA将文件上载到SharePoint 我找到了一些urlmon代码,解决了文件下载问题 我看到过使用UNC、winhttp POST和SEND以及SP SDK编写脚本的代码,但由于站点和软件安装的限制,我无法使后者正常工作 我需要直接上传,例如发送到“http://example.com/foldername". 我尝试将Scripting.FileSystemObject与URL一起使用 我大胆地假设,除了UNC和winhttp POST/SEND之外,还有一种V
Public Function UploadEICRs(ByVal file As String, uploadFolder As String)
Dim SharepointAddress As String
Dim LocalAddress As String
Dim objNet As Object
Dim FS As Object
' Where you will enter Sharepoint location path
SharepointAddress = "https://example.com/test_folder/"
' Where you will enter the file path, ex: Excel file
LocalAddress = file
SPFolder = SharepointAddress & uploadFolder & "/"
Debug.Print SPFolder
Set objNet = CreateObject("WScript.Network")
Set FS = CreateObject("Scripting.FileSystemObject")
If FS.FileExists(LocalAddress) Then
FS.CopyFile LocalAddress, SPFolder
End If
Set objNet = Nothing
Set FS = Nothing
End Function
Sub uploadFiles()
Dim FileSystem As Object
Dim HostFolder As String
HostFolder = GetFolder
Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(HostFolder)
End Sub
Sub DoFolder(folder)
Dim SubFolder
Dim LString As String
Dim LArray() As String
Dim CertFolder As String
Dim ufile As String
Dim pFolder As String
LString = folder
LArray = Split(LString, "\")
For Each SubFolder In folder.SubFolders
DoFolder SubFolder
Next
Dim file
For Each file In folder.Files
CertFolder = LArray(3)
pFolder = LArray(0) & "\" & LArray(1) & "\" & LArray(2)
Debug.Print CertFolder
Debug.Print file
Debug.Print pFolder
ufile = file
sendfile2 ufile, CertFolder, pFolder
Next
End Sub
Public Sub sendfile2(ByVal file As String, sUrl As String, fPath As String)
On Error GoTo err_Copy
Dim xmlhttp As MSXML2.XMLHTTP60
Dim sharepointUrl
Dim sharepointFileName
Dim tsIn
Dim sBody
Dim LlFileLength As Long
Dim Lvarbin() As Byte
Dim LobjXML As Object
Dim LstrFileName As String
Dim LvarBinData As Variant
Dim PstrFullfileName As String
Dim PstrTargetURL As String
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim fldr
Dim f
Dim pw As String
Dim UserName As String
Dim RetVal
Dim I As Integer
Dim totFiles As Integer
Dim Start As Date, Finish As Date
Debug.Print file
Debug.Print sUrl
sharepointUrl = "https://example.com/folder/folder"
Set LobjXML = CreateObject("Microsoft.XMLHTTP")
mypath = sharepointUrl & "/" & sUrl
Debug.Print mypath
LobjXML.Open "HEAD", mypath, False 'Check for Directory
LobjXML.Send
If LobjXML.StatusText = "NOT FOUND" Then
'Create directory if not there
LobjXML.Open "MKCOL", mypath, False
LobjXML.Send
End If
Set fldr = fso.GetFolder(fPath & "\" & sUrl)
Debug.Print fldr
totFiles = fldr.Files.Count
For Each f In fldr.Files
sharepointFileName = sharepointUrl & "/" & sUrl & "/" & f.Name
Debug.Print sharepointFileName
PstrFullfileName = fPath & "\" & sUrl & "\" & f.Name
LlFileLength = FileLen(PstrFullfileName) - 1
Debug.Print PstrFullfileName
' Read the file into a byte array.
If LlFileLength <> 0 Then
ReDim Lvarbin(LlFileLength)
Open PstrFullfileName For Binary As #1
Get #1, , Lvarbin
Close #1
End If
' Convert to variant to PUT.
LvarBinData = Lvarbin
PstrTargetURL = sharepointUrl & "/" & sUrl & "/" & f.Name
' Put the data to the server, false means synchronous.
LobjXML.Open "PUT", PstrTargetURL, False
' Send the file in.
LobjXML.Send LvarBinData
'End If
I = I + 1
'RetVal = SysCmd(acSysCmdSetStatus, "File " & I & " of " & totFiles & " copied...")
Next f
'RetVal = SysCmd(acSysCmdClearStatus)
Set LobjXML = Nothing
Set fso = Nothing
err_Copy:
If Err <> 0 Then
MsgBox Err & " " & Err.Description
End If
End Sub
Function GetFolder() As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = Application.DefaultFilePath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Function
Public函数UploadEICRs(ByVal文件作为字符串,uploadFolder作为字符串)
Dim SharepointAddress作为字符串
将本地地址设置为字符串
作为对象的模糊对象
作为对象的Dim FS
'您将在其中输入Sharepoint位置路径
SharepointAddress=”https://example.com/test_folder/"
'您将在其中输入文件路径,例如:Excel文件
LocalAddress=文件
SPFolder=SharepointAddress&uploadFolder&“/”
调试。打印SPF文件夹
Set objNet=CreateObject(“WScript.Network”)
设置FS=CreateObject(“Scripting.FileSystemObject”)
如果存在FS.files(LocalAddress),则
FS.CopyFile本地地址,SPFolder
如果结束
Set objNet=Nothing
设置FS=Nothing
端函数
子上载文件()
将文件系统作为对象
将HostFolder设置为字符串
HostFolder=GetFolder
设置FileSystem=CreateObject(“Scripting.FileSystemObject”)
DoFolder FileSystem.GetFolder(主机文件夹)
端接头
子文件夹(文件夹)
暗文件夹
像弦一样变暗
Dim LArray()作为字符串
将文件夹设置为字符串
将文件变暗为字符串
像线一样变暗
LString=文件夹
LArray=拆分(L字符串“\”)
对于folder.SubFolders中的每个子文件夹
DoFolder子文件夹
下一个
暗文件
对于文件夹.Files中的每个文件
CertFolder=LArray(3)
pFolder=LArray(0)和“\”&LArray(1)和“\”&LArray(2)
调试。打印证书文件夹
调试.打印文件
调试。打印pFolder
ufile=文件
sendfile2 ufile、CertFolder、pFolder
下一个
端接头
Public Sub sendfile2(ByVal文件作为字符串,sUrl作为字符串,fPath作为字符串)
错误时转到错误复制
Dim xmlhttp作为MSXML2.XMLHTTP60
Dim sharepointUrl
Dim sharepointFileName
丁青
暗色体
Dim LlFileLength尽可能长
Dim Lvarbin()作为字节
Dim LobjXML作为对象
Dim LstrFileName作为字符串
Dim LvarBinData作为变体
Dim PstrFullfileName作为字符串
将PstrTargetURL设置为字符串
作为对象的Dim fso
设置fso=CreateObject(“Scripting.FileSystemObject”)
模糊fldr
暗f
作为字符串的Dim pw
将用户名设置为字符串
模糊复述
作为整数的Dim I
将文件设置为整数
Dim开始日期,结束日期
调试.打印文件
调试打印sUrl
sharepointUrl=”https://example.com/folder/folder"
设置LobjXML=CreateObject(“Microsoft.XMLHTTP”)
mypath=sharepointUrl&“/”和sUrl
调试。打印我的路径
打开“HEAD”,mypath,False,检查目录
发送
如果LobjXML.StatusText=“未找到”,则
'如果不存在,则创建目录
LobjXML.Open“MKCOL”,mypath,False
发送
如果结束
设置fldr=fso.GetFolder(fPath&“\”&sUrl)
调试。打印fldr
totFiles=fldr.Files.Count
对于fldr.文件中的每个f
sharepointFileName=sharepointUrl&“/”&sUrl&“/”&f.名称
调试.打印sharepointFileName
PstrFullfileName=fPath&“\”&sUrl&“\”&f.名称
LlFileLength=FileLen(PstrFullfileName)-1
调试。打印PstrFullfileName
'将文件读入字节数组。
如果LlFileLength为0,则
ReDim Lvarbin(LlFileLength)
打开二进制文件的PstrFullfileName作为#1
1号,艾尔宾
关闭#1
如果结束
'转换为变量以放置。
LvarBinData=Lvarbin
PstrTargetURL=sharepointUrl&“/”&sUrl&“/”&f.名称
'将数据放入服务器,false表示同步。
LobjXML.Open“PUT”,PstrTargetURL,False
'将文件发送进来。
发送LvarBinData
"完"
I=I+1
'RetVal=SysCmd(acSysCmdSetStatus,“文件”&I&“of”&totFiles&“复制…”)
下一个f
'RetVal=SysCmd(acSysCmdClearStatus)
设置LobjXML=Nothing
设置fso=无
错误副本:
如果错误为0,则
MsgBox错误和错误说明(&R)
如果结束
端接头
函数GetFolder()作为字符串
Dim fldr As FILE对话框
以字符串形式显示
设置fldr=Application.FileDialog(msoFileDialogFolderPicker)
与fldr
.Title=“选择一个文件夹”
.AllowMultiSelect=False
.InitialFileName=Application.DefaultFilePath
如果.Show-1,则转到下一个代码
sItem=.SelectedItems(1)
以
下一个代码:
GetFolder=sItem
设置fldr=无
端函数
您必须使用SharePoint API才能安全地登录文档库并将文件添加到文档库中。如果可以从VBA代码进行HTTP调用,则可以使用,也可以下载,然后从VBA中引用.dll。请注意,Microsoft的大多数示例都使用C#,但适用于VB。非常感谢,我将查看REST API并了解它的作用。祝你好运。如果我能够创建一个可行的解决方案,我会将其发布在这里。以下是将文件上载到sharepoint的代码。我不能把它归功于它,因为几乎所有的代码都是从这个网站上其他人的优秀作品中获取的。