Доступ к переменным Microsoft Word с помощью Interop - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь получить доступ к набору ранее определенных переменных в документе MS Word, используя Interop.До сих пор мне удавалось делать это, читая код переменной как строку и фильтруя имя, но я хотел бы сделать это, используя непосредственно имена переменных.

Пожалуйста, помогите прочитать список имен DocVariable.

Код уже работает:

Microsoft.Office.Interop.Word.Document my_Document = (Microsoft.Office.Interop.Word.Document)my_Word.Documents.Open(ref oLoc, ref oMissing, ref oFalse, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oTrue, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

        foreach (Field f in my_Document.Fields)
        {
            if (f.Type == WdFieldType.wdFieldDocVariable)
            {
                string txt = f.Code.Text;
                string str = txt.Split(" ".ToCharArray())[2];


                foreach (LabsandVals recList in list)
                {
                    if (str == recList.Labels)
                    {
                        string valso = recList.Vals;
                        my_Document.Variables[str].Value = recList.Vals;
                        my_Document.Fields.Update();
                    }
                }

            }
        }

Я хотел бы использовать вместо my_Document.Fields.OfType для чтения в виде списка.

1 Ответ

0 голосов
/ 15 ноября 2018

Объекты Word Field не соответствуют критериям для использования OfType: «Фильтрует элементы элемента System.Collection IEnumerable на основе указанного типа».

Может быть, лучше зациклить my_Document.Variables и сравнить Variable.Name с recList. Это, безусловно, было бы более эффективно, чем зацикливание полей в документе, сравнение типов полей, разделение кода.

foreach (Word.Variable DocVar in my_Document.Variables)
{
   MessageBox.Show(DocVar.Name.ToString()); 
}

Кроме того, из соображений эффективности было бы лучше поместить my_Document.Fields.Update вне цикла, чтобы поля в документе обновлялись только один раз. В зависимости от того, какие поля содержит документ, их обновление может занять заметное количество времени (например, ссылки).

...