Office安全更新后VSTO C#操作Word Shape抛出ComException求助
Office 2019安全更新后VSTO遍历Shape触发ComException的解决方案
问题背景
此前运行无异常的VSTO C#代码,在Office 2019安装最新安全更新后,遍历Word文档的Shape对象时开始抛出ComException,尤其当文档包含TextBox时问题必现。核心逻辑为:打开Word文档,遍历Shape对象,处理文本框中的合并域。
原代码片段:
Document wordTemplate = {a word document} foreach (Shape shape in wordTemplate.Shapes) { if (shape?.TextFrame != null && shape.TextFrame.HasText != 0) { foreach (Field fld in shape.TextFrame.TextRange.Fields) { if (fld.Type == WdFieldType.wdFieldMergeField) { fld.Select(); FindReplaceMergeField(wordApp, fld.Code.Text); fld.Update(); } } shape.TextFrame.TextRange.Fields.Update(); } } void FindReplaceMergeField(_Application wordApp, string fieldText) { wordApp.Selection.Text = fieldText; }
可行解决方法
1. 遍历Shape时添加异常捕获
安全更新后部分特殊Shape类型的属性访问权限被限制,直接遍历会触发异常。可在遍历每个Shape时加入try-catch块,跳过异常Shape:
foreach (Shape shape in wordTemplate.Shapes) { try { if (shape?.TextFrame != null && shape.TextFrame.HasText != 0) { // 原合并域处理逻辑 } } catch (System.Runtime.InteropServices.COMException) { // 记录异常日志后跳过当前Shape continue; } }
2. 改用索引遍历Shapes集合
直接遍历Shapes集合可能触发安全限制,改用索引遍历的方式可规避该问题:
int shapeCount = wordTemplate.Shapes.Count; for (int i = 1; i <= shapeCount; i++) { Shape shape = null; try { shape = wordTemplate.Shapes[i]; if (shape?.TextFrame != null && shape.TextFrame.HasText != 0) { // 原合并域处理逻辑 } } catch (System.Runtime.InteropServices.COMException) { continue; } }
3. 限定仅处理指定Shape类型
安全更新后部分非TextBox类型的Shape可能存在访问限制,先判断Shape类型再处理:
foreach (Shape shape in wordTemplate.Shapes) { try { if (shape.Type == Microsoft.Office.Core.MsoShapeType.msoTextBox && shape?.TextFrame != null && shape.TextFrame.HasText != 0) { // 原合并域处理逻辑 } } catch (System.Runtime.InteropServices.COMException) { continue; } }
4. 替换Selection对象操作
原代码中通过fld.Select()和wordApp.Selection修改文本的方式,在安全更新后可能因权限问题触发异常。改用直接操作Field属性的方式替代:
// 修改合并域处理逻辑,删除Select和FindReplaceMergeField调用 if (fld.Type == WdFieldType.wdFieldMergeField) { // 直接修改域代码,无需选中操作 fld.Code.Text = fld.Code.Text; fld.Update(); } // 移除原FindReplaceMergeField方法
内容的提问来源于stack exchange,提问作者TDaddy Hobz
相关产品推荐
相关产品推荐

