从当前打开的从 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 文件

sharepoint 2013 在线 mime

从网站直接保存到 SharePoint Online

powershell 从SharePoint场下载所有SharePoint wsp解决方案。

使用 Web 服务从 SharePoint 下载文件的特定版本

从Sharepoint获取文件列表并下载最新文件