Edraw Office组件OA1.Save()保存HTTP路径文档失效问题咨询
问题原因定位
- Word原生
OA1.Save()方法仅支持写入本地文件系统路径,对HTTP/HTTPS协议的远程资源默认仅支持读取:你调用Save()时修改仅保存在本地临时缓存中,不会主动发起请求回写到服务器,看起来执行成功实际没有生效。 - 代码中
On Error Resume Next语句掩盖了实际报错:保存HTTP路径文件时已经抛出了权限/协议不支持的错误,被错误捕获逻辑跳过,所以没有触发错误提示。 - 缺少WebDAV支持:代码注释中提到要获取WebDAV URL,但当前拼接的是普通静态HTTP资源路径,服务器端没有为存储目录开启WebDAV的写入权限、PUT方法支持,就算调用正确的保存方法也无法写入。
- URL格式不规范:示例中的HTTP路径混用了HTTP前缀和Windows反斜杠
\,正确的HTTP路径应该统一使用正斜杠/,格式错误也会导致保存失败。
解决方案
- 配置服务器端WebDAV
如果你用的是IIS服务器,需要给存储文档的almacen/resoluciones目录开启WebDAV功能,放开对应站点用户的PUT写入权限,关闭不必要的WebDAV锁定规则避免写入冲突。 - 替换保存方法为
SaveAs2
Word提供的SaveAs2方法支持写入规范的WebDAV路径,将原代码中的OA1.Save()替换为以下逻辑:' 先规范路径格式,把反斜杠统一替换为正斜杠 dim saveUrl saveUrl = Replace(url, "\", "/") ' 调用SaveAs2方法写入远程路径 OA1.Dispatch.ActiveDocument.SaveAs2 saveUrl - 调试阶段放开错误捕获
排查问题时先注释On Error Resume Next语句,直接获取保存时的具体错误码:如果是401就是权限问题,405是PUT方法未开放,404是路径不存在,根据报错针对性调整配置。 - 补充身份认证逻辑
如果WebDAV开启了身份校验,打开文档时需要传入凭据:OA1.Dispatch.UserName = "WebDAV授权用户名" OA1.Dispatch.Password = "WebDAV授权密码" - 备选兼容方案
如果WebDAV配置难度较高,可以修改逻辑:先把远程文件下载到本地临时目录修改,修改完成后通过POST/PUT请求把文件流上传到服务器的接收接口,该方案不依赖Word的WebDAV支持,兼容性更好。
内容的提问来源于stack exchange,提问作者user16595696
相关产品推荐
相关产品推荐

