无本地磁盘瘦客户端下,如何获取SharePoint打开的.docm字节数组
获取已打开Word文档(.docm)的字节数组无需保存到本地
针对你的场景——在无本地磁盘的瘦客户端从SharePoint打开.docm文档,需要获取修改后的文档字节数组并发送到Web服务——下面是可行的解决方案:
核心思路
你无法直接通过HTTP路径读取文件(因为这不是本地文件),但可以利用Word对象模型的SaveToStream方法,将当前打开的文档内容直接写入内存流,再从流中提取字节数组,完全不需要保存到本地磁盘。
完整VBA代码
替换你代码中bytFile = ??????????的部分,使用以下代码:
Dim bytFile() As Byte Dim adodbStream As Object Dim wordStream As Object ' 创建ADODB流对象(后期绑定,无需添加引用) Set adodbStream = CreateObject("ADODB.Stream") adodbStream.Type = 1 ' 设置为二进制类型 adodbStream.Open ' 将当前文档保存到流中(需Office 2010及以上版本支持) Set wordStream = adodbStream ThisDocument.SaveToStream wordStream ' 将流指针移到起始位置 adodbStream.Position = 0 ' 读取流中的所有字节到数组 bytFile = adodbStream.Read ' 清理资源 adodbStream.Close Set adodbStream = Nothing Set wordStream = Nothing
关键说明
- 版本要求:
SaveToStream方法从Office 2010开始提供,如果你的环境使用更旧的Office版本,需要另寻方案(但瘦客户端通常会配备较新的Office套件)。 - 后期绑定优势:使用
CreateObject而非引用库,避免不同Office版本的兼容性问题。 - 获取修改后的内容:这个方法会捕获当前文档的所有修改,而不是SharePoint上的原始文件,完全符合你的需求。
整合到你的现有代码
替换后你的完整代码应该是这样:
Dim filePath As String Dim fileName As String Dim fullFileName As String filePath = ThisDocument.path fileName = ThisDocument.Name fullFileName = filePath + "/" + fileName Dim bytFile() As Byte Dim http Dim userName As String Dim url As String Set http = CreateObject("MSXML2.ServerXMLHTTP") userName = "Me" ' --- 读取文件(替换为流处理代码) Dim adodbStream As Object Dim wordStream As Object Set adodbStream = CreateObject("ADODB.Stream") adodbStream.Type = 1 adodbStream.Open Set wordStream = adodbStream ThisDocument.SaveToStream wordStream adodbStream.Position = 0 bytFile = adodbStream.Read adodbStream.Close Set adodbStream = Nothing Set wordStream = Nothing ' --- 发送文件到API服务器 url = "http://localhost/DocWebApi/Post?fileName=" & fileName & "&userName=" & userName http.Open "POST", url, False http.Send (bytFile) http.waitForResponse 4000
内容的提问来源于stack exchange,提问作者klingu
相关产品推荐
相关产品推荐

