Проблема с настройкой свойств слова в C #? - PullRequest
1 голос
/ 09 января 2010

Я написал простой код для открытия файла Word (.docx) и установки свойств для этого файла. Этот код делает именно саму работу. Но когда C # открывает Microsoft Word, я должен обновить все поля, чтобы увидеть реальные значения, которые обновляются из моего кода!

Я хочу знать, что я делаю в своем коде, когда Microsoft Word открыт, все свойства имеют реальные значения и больше не нужно обновлять свойства с помощью mysself?

это мой код:

Совет: свойства словаря содержат имя и значение свойства.

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);
        }
}

1 Ответ

1 голос
/ 20 февраля 2010

После долгого времени ...

Я обнаружил, что моя настоящая большая проблема. (Значит, мой коллега нашел это решение)

После foreach мы должны использовать этот код для обновления всех свойств

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

с особой благодарностью от моего сотрудника

...