我们已经在我们的应用程序中快乐地运行了这几行代码(在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):你不是 允许编辑此选择,因为它受到保护。
因此,只有在用户运行Office 2013时才会发生这种情况,而且此错误的联机帮助很少。
文档的任何部分都不受保护,用户可以直接在Word中编辑文档而没有任何问题。
答案 0 :(得分:20)
无奈之下,甚至在博客文章和远离此特定错误的讨论中搜索答案似乎Office 2013中的更改似乎是对ReadingLayout的默认处理。
引入行w.ActiveWindow.View.ReadingLayout = False
似乎解决了我们的问题。
答案 1 :(得分:3)
我们有一些C#自动化在Word 2007/2010中运行良好,但在Word 2013中停止使用相同的“您不被允许...”警告。
按照此site的步骤解决了这个问题。
基本上有两种设置需要检查:
答案 2 :(得分:2)
您没有指定文档的打开方式,但是通过遵循this question上接受的答案解决了我遇到的问题。
从WordApplication.Documents.Open()
切换到WordApplication.Documents.Add()
解决了我的申请问题。
答案 3 :(得分:1)
在我的情况下,此错误是由.LockContentControl == true
的内容控件的存在引起的。
要解决此问题,我构建了一个IEnumerable<ContentControl>
内容控件,并将此属性设置为true,并设置.LockContentControl = false
。
现在我可以.InsertColumnsRight()
没有问题。然后我为我的集合中的所有内容控件恢复.LockContentControl = true
。
答案 4 :(得分:1)
尝试了以上大多数建议,但我发现此问题得以解决。 我们正在使用密码以只读方式打开文档作为模板。 所以不能使用“添加”
Documents.Open(strTemplateDoc, ReadOnly:=True, PasswordDocument:=strDocPassword, Visible:=False)
将View.Type设置为wdNormalView停止了错误 “不允许您编辑此选择,因为它受到了保护”
wdDocPage.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdNormalView
感谢所有其他人的建议-他们提供了很多帮助。
答案 5 :(得分:0)
过去两天(在创建一个dotm模板时)我发生了这种情况,而为我修复的是创建一个新的normal.dotx!不知道这是否适用于其他人,但它确实适合我!
答案 6 :(得分:0)
当您打开文档时,请指定它不应以只读方式打开
object readOnly = false;
doc = word.Documents.Open(ref path, ref miss, ref readOnly, ...);
答案 7 :(得分:0)
对我来说,问题类似于Tim Dols的回答,但我需要解锁内容控件的内容,即LockContents
属性:
mycontentcontrol.LockContents = False
对于@ CrazyIvan1974,该解决方案的问题是Add创建了一个新文档。如果在使用“添加”时指向现有文档,则不会加载文档,而是使用原始文档作为模板创建新文档。这可以断开模板和插件的连接,如果你保存原始的
,真的搞砸了你