C#Fields.Update无效

时间:2014-01-20 05:32:24

标签: c# ms-word office-interop

我正在将旧的VB应用程序转换为C#。这是已转换方法的减少(记录,错误处理等已删除):

Word.Document oDoc = new Word.Document();
Word.Application oWord = null;

//'Use Passed Word Application ELSE Open new Word Application.
oWord = WordInstance ?? new Word.Application { Visible = false };

//'Call Property Updating Method
oWord = UpdateProperties(ref oWord, ref oDoc);

//'Refresh All Fields
try { oDoc.Fields.Update(); } catch { }

//'Print
oWord.PrintOut(
    Background: false,
    Copies: QueueDetail.Copies
);

正在使用的文档将CustomeDocumentProperties作为上一步添加到它们中(数据库表中的foreach行=>添加CustomDocumentProperty)。

UpdateProperties()从数据库中提取数据并更新那些CustomDocumentProperties(在document =>从数据库设置值中的foreach CustomProperty)。

从我所看到的属性正在更新。我可以执行foreach打印所有自定义属性和Name/Value s匹配,直到预期为止。我可以保存文档,字段可以更新,也可以通过右键单击更新=>更新字段。

问题在于,似乎只有一半的字段通过oDoc.Fields.Update();进行了更新。 (因此需要保存文件并右键单击update field以验证数据实际上是否在字段中。)

这样的文档就像这样,每个块都是一个FIELD:

LASTNAME, FIRSTNAME MI
ADDRESS
CITY, STATE ZIP
HOMEPHONE

更新为:

Public, John Q
1234 Never Never Lane
CITY, STATE ZIP
HOMEPHONE

在之前的程序中,这似乎没有问题。到目前为止,其他所有内容都是我能用最小问题解决的问题(主要是VB到C#的更改以及对Log4net的日志更改)。

如何解决Fields.Update()未更新所有字段的原因?它在try / catch中,不会抛出任何错误。之前的一切(字段中包含数据)和之后(文档打印的字段未更新)似乎很好......)

1 个答案:

答案 0 :(得分:0)

更新:

//'Use Passed Word Application ELSE Open new Word Application.
oWord = this.oWord ?? new Word.Application { Visible = false };

//'Call Property Updating Method
oWord = UpdateProperties(ref oWord, ref oDoc);

//'Call PrePrint Function (if existing)
try { oWord.Run("PrePrint"); } catch { }

//'Refresh All Fields try { oDoc.Fields.Update(); } catch { }
foreach (Field field in oDoc.Fields)
    field.Update();

//'Refresh All Shapes
foreach (Shape shape in oDoc.Shapes)
    shape.TextFrame.TextRange.Fields.Update();

// Print Document
Print(oWord);

问题是需要通过Shapes更新分组/文本框。第一个field.Update()没有全部捕获它们。