フィールドがネストされている場合、問題があります。
foreach (Word.Field field in this.Application.ActiveDocument.Fields)
{
field.Update();
text = field.Result.Text;
}
上記のコードは機能しません。
プロセスは開始されますが、システムをハングアップさせる無限ループまたはその他のプロセスに陥ります。
考えてみると、フィールドを更新すると、フィールド コレクションに影響を与える可能性があると推測できます。したがって、ループは失敗します。
これを実装するアイデアはありますか?
PS すべてのフィールドを更新する Document.UpdateFields() メソッドがあることは知っています。ただし、これを使用できない理由があり、特定のフィールド タイプのみを更新する必要があります。
謝罪いたします!ネストされたフィールドの例を示すつもりでしたが、誰か (ジャック) をグースチェイスに送る前に、もう少しテストしようとしていました。
待って待って待って、2、3分で終わりました。最後のフィールドの後、次のメッセージでクラッシュしました。
オブジェクトが削除されました。
エラーは、ループ内の次の行から生成されました。
文字列テキスト = field.Code.Text;
テンプレートは、データベース接続なしでテストしているため、見つからないマージフィールドでテストされています。それがすべてのフィールドを通過し、その日の終わりにまさに OUTER IF フィールドの結果が「エラー! 参照元が見つかりません」になるというのは奇妙ですが、説明できます。しかし、なぜこれが起こるのかはまだわかりません。
また、document.Fields.Update() の呼び出しが約 1 秒で同じことを行い、上記のエラーが発生しないのに、ループに 3 分かかる理由もわかりません。
繰り返しますが、お詫び申し上げます。ループ内での更新が doc.fields.update() の呼び出しよりも大幅に遅くなるとは考えていませんでした。