我正在使用一个 C# 程序,该程序必须解析 Microsoft Word 文档的文本框和其他内容。为此,我使用 Microsoft.Office.Interop.Word 库。但是,当我尝试按类型过滤形状,特别是查找文本框时,我收到 COMException。
导致问题的代码行如下:
var textBoxContents = doc.Shapes.Cast<Word.Shape>()
.Where(shape =>
{
try
{
return shape.Type == Microsoft.Office.Core.MsoShapeType.msoTextBox;
}
catch (System.Runtime.InteropServices.COMException)
{
// Skip this shape if an exception occurs while accessing its Type property
return false;
}
})
.Select(shape => shape.TextFrame.TextRange)
.ToList();
当执行 shape.Type == Microsoft.Office.Core.MsoShapeType.msoTextBox 行时,抛出以下异常:
System.Runtime.InteropServices.COMException: 'Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))'
为了处理错误并避免有问题的形状,我添加了一个 try-catch 块,但这似乎并没有解决问题。
是否有其他人遇到此问题?如果有,我如何正确访问 Shape.Type 属性而不会遇到此异常?有没有解决方案或更好的方法来使用 Microsoft.Office.Interop.Word 库从 Word 文档中提取文本框?
如果有任何帮助,我将非常感激。
我不想劫持这篇文章,但对于其他偶然发现这个问题的人,我建议查看我的 SO 帖子,其中有这个问题的解决方案: C# VSTO |在 Office365 中启用 ModernComments 时,尝试访问任何形状的属性时,Word 会崩溃