WebDAV - Microsoft Excel 2016无法保存更改

时间:2015-12-07 16:35:10

标签: webdav ithit-webdav-server ithit-ajax-file-browser

我在公司网站上设置了ITHit WebDAV服务器,它在Office 2007/10/13上使用PowerPoint,Word和Excel运行良好。但是我最近更新到Office 2016,我发现Excel不再有效,但Word和PowerPoint工作正常。

在Excel中,我收到以下错误消息:

enter image description here

在Word和PowerPoint中,我得到下面的对话框,我可以跳过:

enter image description here

Excel 2016中的ITHit WebDAV服务器是否存在已知问题?

当我在Visual Studio 2015中附加时,没有抛出任何异常。此外,当我检查Fiddler时,我可以看到WebDAV服务器尝试做的最后一件事是锁定文档似乎没有任何异常。它锁定并解锁文档两次然后在我尝试保存它的锁上然后返回Excel中的错误消息(见图1)。

锁定请求如下所示:

First Lock OK: enter image description here

解锁: enter image description here

锁定文档并停止: enter image description here

我认为唯一不同的是标题的Miscellaneous部分中的字段: enter image description here

我已经筋疲力尽了所有的选择,我不知道为什么会出现这种情况只是在2016年的办公室中表现出色。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

这个错误已经存在了一段时间,我发现了一个旧的相关微软帖子:

http://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_other/upload-failed-server-file-updated-were-sorry/30b69218-2cc1-40e2-8ede-69ac8bd55ba6

微软从未提出过解决方案,但名为Berend Engelbrecht的用户确实发布了两个解决方法。有一个代码修复,对我不起作用,但值得尝试。假设Excel错误地处理了修改日期,所以不要再费心了。这就是我为IT Hit WebDAV实现的方法。在我的IHierarchyItemAsync实现中将Modified修改为DateTime.MinValue会阻止将修改日期添加到响应中。

if (context.Request.UserAgent != null &&
    context.Request.UserAgent.IndexOf("Microsoft Office Excel", StringComparison.InvariantCultureIgnoreCase) >= 0)
{
    Modified = DateTime.MinValue;
}

第二种解决方案确实有效,但对我们的最终用户来说并不实用。每个人都必须关闭互联网文件的受保护视图:文件>选项>信托中心>信任中心设置>受保护的视图。

另请注意,在本地调试时,我从未遇到过问题,因为我的本地WebDAV没有将受保护的视图作为“互联网位置”触发。

希望其中一个有帮助,如果有人找到不同的解决方案,请在此处发布。

答案 1 :(得分:0)

我已经仔细检查过MS Excel 2016可以正常使用IT Hit WebDAV Server Engine。以下是可能导致此问题的原因:

  • 日期属性实现不正确Modified。确保这一点 属性返回正确的 UTC 日期。

  • ETag实施不正确。请务必更改此属性 每次更新文件时。

我检查了2个服务器配置:运行Server Engine v3.9.2075的https://ajaxbrowser.com网站(匿名身份验证)和运行在由Visual Studio v4.5.2958的WebDAV向导生成的localhost上的示例服务器(在注册表中启用了基本身份验证) )。

作为测试客户端环境,我在Win 8.1上使用了MS Office 2016,在Win 10上使用了MS Office 2013.在这两种情况下,excel文档打开都没有问题,我能够将其保存回服务器。 MS Office受保护的视图选项在测试计算机上设置为默认值 - 全部选中。

答案 2 :(得分:0)

我知道这篇文章很旧,但是对于遇到同样问题的人来说,这是解决方法:

引起此错误的原因是,如果用户选择“启用编辑”,Excel将再次请求文件。 如果服务器再次发送文件(代码为200)而不返回304(未修改),则Office似乎认为有人更改了文档,即使不是这种情况。

一种快速的解决方案是使用ETag标头,并在以后的请求中验证If-None-Match来知道返回什么,无论是304还是200。