使用VSTO检查字引用中的字段错误

时间:2012-10-01 07:33:43

标签: vsto office-interop

如何检查单词中的某些字段是否有错误?我有一个大文档,其中包含许多其他章节或图像的引用。如果文档中缺少这些章节或图像,则包含这些参考的字段将显示Error! Reference Source Not Found而不是参考。

问题是,我需要创建一个算法来检查那些引用错误,无论文件的语言环境和语言是什么。问题是,该字段错误已本地化为使用该单词的用户的系统语言。

我该怎么做? Field上是否有可用于检查来源是否可用的属性?

目前,我使用字段的结果文本检查字段中的错误:

Int32 fieldErrors = 0;
foreach (Word.Field field in doc.Fields)
{
    field.Update();
    if (field.Result.Text.StartsWith("Error!"))
        ++fieldErrors;
}

不幸的是,这只适用于英语单词实例。

1 个答案:

答案 0 :(得分:2)

Field类型的文档中,可以看到Field实例的Update()方法返回bool。文档没有说明返回值的语义含义,但是,通过做一个简短的实证研究,我发现如果true成功,则方法返回Update(),如果false,则返回var fieldsWithErrors = new List<Field>(); foreach (Field field in document.Fields) { if(!field.Update()) fieldsWithErrors.Add(field); } 更新没有成功。这意味着,为了找到有错误的字段,您可以执行以下操作:

var fieldsWithErrors = document.Fields.Cast<Field>().Where(field => !field.Update()).ToList();

......或更短的LINQ:

Update()

另一种(更快)的方法是使用Fields集合公开的var indexOfFirstError = document.Fields.Update(); 方法。

{{1}}

...该方法返回带有错误的第一个字段的索引。如果未找到错误,则该方法返回0.

有关完整文档,请参阅MSDN参考: