在C#中设置单词属性时出现问题?

在C#中设置单词属性时出现问题?,c#,.net,ms-word,office-interop,C#,.net,Ms Word,Office Interop,我编写了简单的代码来打开Word文件(.docx)并设置该文件的属性。这段代码本身就完成了这项工作。但是,当C#打开Microsoft Word时,我应该更新所有字段,以查看从代码中更新的实际值 我想知道,当Microsoft Word打开时,我在代码中做了什么,所有属性都有真实的值,不再需要使用myself更新属性? public void SetWordFile(string FilePath, Dictionary<string, object> properties)

我编写了简单的代码来打开Word文件(.docx)并设置该文件的属性。这段代码本身就完成了这项工作。但是,当C#打开Microsoft Word时,我应该更新所有字段,以查看从代码中更新的实际值

我想知道,当Microsoft Word打开时,我在代码中做了什么,所有属性都有真实的值,不再需要使用myself更新属性?

public void SetWordFile(string FilePath, Dictionary<string, object> properties)

    {
        Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
        Microsoft.Office.Interop.Word._Document oDoc;
        object originalFormat = Missing.Value;
        object routeDocument = Missing.Value;
        object oMissing = Missing.Value;
        object saveChanges = false;
        object oDocBuiltInProps;
        object oDocAuthorProp;
        Type typeDocAuthorProp;

        oWord.Visible = true;

        object oFalse = false;
        object filePath = FilePath;

        oDoc = oWord.Documents.Open(ref filePath, ref oMissing, ref oFalse, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

        oDocBuiltInProps = oDoc.CustomDocumentProperties;
        Type typeDocBuiltInProps = oDocBuiltInProps.GetType();
        foreach (string item in properties.Keys)
        {
            oDocAuthorProp = typeDocBuiltInProps.InvokeMember("Item",
                                    BindingFlags.Default |
                                    BindingFlags.GetProperty,
                                    null, oDocBuiltInProps,
                                    new object[] { item });
            typeDocAuthorProp = oDocAuthorProp.GetType();

            typeDocAuthorProp.InvokeMember("Item",
                                       BindingFlags.Default |
                                       BindingFlags.SetProperty,
                                       null, oDocBuiltInProps,
                                       new object[] { item, properties[item] });
            Thread.Sleep(10);
        }
}
这是我的代码:

提示:字典属性包含属性名称和值。

public void SetWordFile(string FilePath, Dictionary<string, object> properties)

    {
        Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
        Microsoft.Office.Interop.Word._Document oDoc;
        object originalFormat = Missing.Value;
        object routeDocument = Missing.Value;
        object oMissing = Missing.Value;
        object saveChanges = false;
        object oDocBuiltInProps;
        object oDocAuthorProp;
        Type typeDocAuthorProp;

        oWord.Visible = true;

        object oFalse = false;
        object filePath = FilePath;

        oDoc = oWord.Documents.Open(ref filePath, ref oMissing, ref oFalse, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

        oDocBuiltInProps = oDoc.CustomDocumentProperties;
        Type typeDocBuiltInProps = oDocBuiltInProps.GetType();
        foreach (string item in properties.Keys)
        {
            oDocAuthorProp = typeDocBuiltInProps.InvokeMember("Item",
                                    BindingFlags.Default |
                                    BindingFlags.GetProperty,
                                    null, oDocBuiltInProps,
                                    new object[] { item });
            typeDocAuthorProp = oDocAuthorProp.GetType();

            typeDocAuthorProp.InvokeMember("Item",
                                       BindingFlags.Default |
                                       BindingFlags.SetProperty,
                                       null, oDocBuiltInProps,
                                       new object[] { item, properties[item] });
            Thread.Sleep(10);
        }
}
public void SetWordFile(字符串文件路径、字典属性)
{
Microsoft.Office.Interop.Word.\u Application oWord=新的Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.\u文档oDoc;
对象原始格式=缺少.Value;
对象RoutedDocument=缺少.Value;
对象删除=缺少.Value;
对象saveChanges=false;
对象oDocBuiltInProps;
对象属性;
键入typeDocAuthorProp;
可见=真;
ALSE的对象=false;
对象文件路径=文件路径;
oDoc=oWord.Documents.Open(ref文件路径、ref omising、ref of alse、ref omising、ref omising、,
引用引用,引用引用引用,引用引用引用,引用引用引用,引用引用引用,引用引用引用,
参考信息,参考信息,参考信息,参考信息,参考信息,参考信息);
oDocBuiltInProps=oDoc.CustomDocumentProperties;
键入typeDocBuiltInProps=oDocBuiltInProps.GetType();
foreach(properties.Keys中的字符串项)
{
oDocAuthorProp=typeDocBuiltInProps.InvokeMember(“项”,
BindingFlags.Default|
BindingFlags.GetProperty,
null,oDocBuiltInProps,
新对象[]{item});
typeDocAuthorProp=oDocAuthorProp.GetType();
typeDocAuthorProp.InvokeMember(“项”,
BindingFlags.Default|
BindingFlags.SetProperty,
null,oDocBuiltInProps,
新对象[]{item,属性[item]});
睡眠(10);
}
}
过了很长时间

我发现了我真正的大问题

在foreach之后,我们应该使用此代码更新所有属性

for(int i=1;i<=Counter;i++)
  oDoc.Fields[i].Update();
for(inti=1;i经过很长时间

我发现了我真正的大问题

在foreach之后,我们应该使用此代码更新所有属性

for(int i=1;i<=Counter;i++)
  oDoc.Fields[i].Update();

for(int i=1;iHi Rev-我正在努力理解什么是有效的/不有效的;我将“此代码完全自己做工作”解释为“它有效”?但我不清楚“所有属性都有真实值,不再需要使用myself更新属性”?你能尝试重新措辞(编辑)吗-第二次可能会更清楚。您好,Marc是的,我的代码正在运行。但当odoc打开Microsoft word应用程序时,文档会显示以前的属性值(即我为word文件创建每个属性时的值),而属性已更改且具有真实值,需要更新所有属性以查看真实值。我的英语太差了(有点灾难)谢谢RevHi Rev-我正在努力理解什么是有效的,什么是无效的;我把“这个代码本身就是工作”理解为“它有效”?但我不清楚“所有属性都有真实的值,不再需要用我自己更新属性”?你能试着重新措辞(编辑)吗-第二次可能会更清楚。您好,Marc是的,我的代码正在运行。但当odoc打开Microsoft word应用程序时,文档会显示以前的属性值(即我为word文件创建每个属性时的值),而属性已更改且具有真实值,需要更新所有属性以查看真实值。我的英语太差了(有点灾难)谢谢你,谢谢你的同事我在寻找同样的答案。谢谢你的同事,我在寻找同样的答案。