从当前打开的从 Sharepoint 下载的 Word 文档 .docm 中获取字节数组,而不保存到本地驱动器
Posted
技术标签:
【中文标题】从当前打开的从 Sharepoint 下载的 Word 文档 .docm 中获取字节数组,而不保存到本地驱动器【英文标题】:Get byte Array from current opened downloaded Word Document .docm from Sharepoint, without save to local drive 【发布时间】:2020-10-19 10:08:53 【问题描述】:如何在不先将其保存到本地驱动器的情况下获取打开的 Word 文档 (.docm) 的字节数组。 该文档将在没有来自 SharePoint 的任何本地驱动器的瘦客户端上打开。当用户想要保存更改时,我需要将字节数组发送到 Web 服务来处理它。 (不返回 SharePoint)。
Dim filePath As String
Dim fileName As String
Dim fullFileName As String
filePath = ThisDocument.path
fileName = ThisDocument.Name
fullFileName = filePath + "/" + fileName
filePath 的值为 'http://webiste/application'
fileName 的值为 'theOpenFileName.docm'
fullFileName 的值为 'http://webiste/application/theOpenFileName.docm'
如何将整个文件作为字节数组获取,以便将其发送到 Web 服务,如下所示:
Dim bytFile() As Byte
Dim http
Dim userName As String
Dim url As String
Set http = CreateObject("MSXML2.ServerXMLHTTP")
userName = "Me"
'--- read file
bytFile = ??????????
'--- send the file to the API server
url = "http://localhost/DocWebApi/Post?fileName=" & fileName & "&userName=" & userName
http.Open "POST", url, False
http.Send (bytFile)
http.waitForResponse 4000
提前致谢!
【问题讨论】:
【参考方案1】:请尝试下一种方法:
Sub testByteArray()
Dim bytFile() As Byte, strDocShare As String
Dim fileDoc As Integer: fileDoc = FreeFile
strDocShare = Application.GetOpenFilename("Office Documents (*.docm),*.docm", , "Please select document to be processed...")
If strDocShare = False Then Exit Sub 'If no document has been selected
Open strDocShare For Binary Access Read As #fileDoc
ReDim bytFile(0 To LOF(fileDoc) - 1)
Get #fileDoc, , bytFile
Close #fileDoc
End Sub
如果文档将打开,上述代码可能会返回错误。一种确定共享文档/工作簿是否被其他用户打开的方法,使用一些类似的代码并捕获错误...
【讨论】:
在您的情况下,文件保存在 SharePoint 完整路径中。对文档所做的更改不会保存,也不会返回到 SharePoint。 strDocShare 需要是 Windows 路径,而不是我的问题中的 URL。 @klingu:没关系!它应该适用于任何路径。对于本地路径,限制更少。 SharePoint 路径(仅)包含在其可能性中。请测试一下,看看它能做什么...... 我收到错误 52。无效的文件名或无效的文件编号:基于:strDocShare = ThisDocument.FullName @klingu:您是否在该特定行收到错误?我无法想象...您可能会在Open strDocShare For Binary Access Read As #fileDoc
行收到错误...在这种情况下,就像我告诉您的那样,打开的文档无法通过该方法读取。那么,你有文件上要处理的代码吗?如果是,您必须关闭它并在 Normal.dot 中移动代码,或者在 Excel 中关闭要处理的文档。如果代码在 Normal.Dot 中,则返回 Normal.dot 的路径...
@klingu:请在strDocShare = ...
之后插入下一行:Debug.Print strDocShare
。它在Immediate Window
(在 VBE - Ctrl + G
)中返回什么?以上是关于从当前打开的从 Sharepoint 下载的 Word 文档 .docm 中获取字节数组,而不保存到本地驱动器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Chrome/Firefox 中打开 SharePoint 文件
powershell 从SharePoint场下载所有SharePoint wsp解决方案。