使用Interop访问Microsoft Word变量

时间:2018-11-15 14:48:03

标签: c# variables ms-word office-interop

我正在尝试使用Interop访问MS Word文档中的一组先前定义的变量。到目前为止,我设法将变量代码读取为字符串并过滤了名称,但是我想直接使用变量名来完成它。

请帮助阅读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 :(得分:0)

Word字段对象不符合使用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放入循环之外,以使文档中的字段仅更新一次。根据文档包含的字段,更新它们可能需要花费大量时间(例如,链接)。