自Office 2013以来,由于受到保护,您无法编辑此选择。

13
我们在应用程序中运行了这几行代码已经有几年了(在多个版本的Office,2003、2007、2010等中)。目的是在Word文档中执行一种邮件合并,用数据库中的姓名、地址等替换字段占位符:
    Dim w As Word.Application
    Dim d As Microsoft.Office.Interop.Word.Document = Nothing

...

    Dim f As Microsoft.Office.Interop.Word.Field
    For Each f In d.Fields
        f.Select()
        If fieldName = w.Selection.Text Then
            f.Result.Text = value
        End If
    Next

然而,使用Office 2013的用户报告称,在f.Result.Text = value这一行出现了以下错误:

System.Runtime.InteropServices.COMException (0x800A17EC): You are not allowed to edit this selection because it is protected.

因此,只有在用户使用Office 2013时才会发生这种情况,而该错误的在线帮助非常有限。

文档的任何部分都没有受到保护,用户可以直接在Word中编辑文档而没有任何问题。

8个回答

22

在绝望中,甚至在与此特定错误完全无关的博客文章和讨论中寻找答案,似乎Office 2013对ReadingLayout的默认处理方式发生了变化。

引入代码 w.ActiveWindow.View.ReadingLayout = False 似乎解决了我们的问题。


1
我曾经遇到过同样的问题,你的答案指引了我正确的方向。不过我无法使用ReadingLayout,我猜它是在后来的版本中引入的,所以我使用了w.ActiveWindow.View.Type = wdPageView - Alex
感谢您提供的解决方案,正是我所需要的。 - Paolo Bergantino
另外...要添加,请执行以下操作...确保实际上也有一个打开的文档。 - douglas.kirschman

4
我们有一些针对Word 2007/2010的C#自动化,但在Word 2013上出现了相同的“您不允许…”警告后停止了工作。
按照此网站上的步骤解决了该问题。
基本上有两个设置需要检查:
  • 文件 - 选项 - 通用。取消选中“在阅读视图中打开电子邮件附件和其他不可编辑文件”
  • 文件 - 选项 - 信任中心 - 信任中心设置。选择受保护视图,然后清除所有复选框。

1
+1,“打开电子邮件附件...”设置是解决我的Access VBA问题的关键。感谢分享。 - Dominic P

3
您没有说明文档是如何打开的,但我曾经遇到一个问题,通过遵循接受的答案在这个问题上得到了解决。
WordApplication.Documents.Open()更改为WordApplication.Documents.Add() 解决了我的应用程序问题。

2
尝试了上面的建议大部分,但我发现以下方法可以解决问题。 我们正在以只读模板的形式打开具有密码保护的文档。 所以无法使用 '添加'。 将View.Type设置为wdNormalView可停止出现错误“您不被允许编辑此选择,因为它受保护”。
wdDocPage.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdNormalView

感谢其他人的建议-它们帮了很大的忙。


2
在我的情况下,这个错误是由于存在 .LockContentControl == true 的内容控件引起的。
为了解决这个问题,我建立了一个 IEnumerable<ContentControl>,其中包含此属性设置为 true 的内容控件,并将 .LockContentControl = false。现在我可以轻松地使用 .InsertColumnsRight()。然后我为我的集合中的所有内容控件恢复了 .LockContentControl = true

0
当你打开一个文档时,请指定它不应仅作为只读方式打开。
object readOnly = false; 
doc = word.Documents.Open(ref path, ref miss, ref readOnly, ...);

0
这个问题困扰了我两天(在创建一个dotm模板时),解决方法是创建了一个新的normal.dotx文件!不确定对其他人是否有效,但对我有效!

0

对我而言,问题与Tim Dols的回答类似,但我需要解锁内容控件中的内容,这就是LockContents属性: mycontentcontrol.LockContents = False

对于@CrazyIvan1974而言,该解决方案的问题在于Add会创建新文档。如果你在使用Add时指向现有文档,它不会加载文档,而是使用原始文档作为模板创建新文档。这可能会断开模板和加载项,如果你保存到原始文件上将会非常混乱。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接