1

我正在使用这样的代码:

public void BindControlsToCustomXmlPart()
    {

          wordApp = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");

          foreach (Word.ContentControl contentControl in wordApp.ActiveDocument.ContentControls)
          {
              if (contentControl.Tag == "FieldName")
              {
                  string xPathFieldName = "ns:records/ns:record/ns:FieldName";

                  contentControl.XMLMapping.SetMapping(xPathFieldName,
                    prefix, currentWordDocumentXMLPart);
              }

最终发生的是我要添加的每个新字段,我必须重复这个冗余代码:

              if (contentControl.Tag == "FieldName2")
              {
                  string xPathFieldName2 = "ns:records/ns:record/ns:FieldName2";

                  contentControl.XMLMapping.SetMapping(xPathFieldName2,
                    prefix, currentWordDocumentXMLPart);
              }

有没有一种方法可以让我编写一次此代码并动态更新每个字段的“FieldName”部分?即有某种类型的循环,它将通过 xml 文件中的每个 xmlnode 递增(在这种情况下,它会将 xml 节点 FieldName 映射到带有 FieldName 标记的内容控件,然后将 xml 节点 FieldName2 映射到带有FieldName2 的标签

4

1 回答 1

0

一个好的开始是创建一个函数来转换您的控件并多次重复使用该函数,如下所示

public contentControl BindControlsOperation(contentControl control, string pFieldName)
{
          if (control.Tag == pFieldName)
          {
             string xPathFieldName = String.Format("ns:records/ns:record/ns:{0}",pFieldName);
             control.XMLMapping.SetMapping(xPathFieldName,prefix, currentWordDocumentXMLPart);
          }

          return control;
 }

然后,您可以按以下方式使用它

  foreach (Word.ContentControl contentControl in wordApp.ActiveDocument.ContentControls)
  {
          contentControl = BindControlsOperation(contentControl,"FieldName")
  }

下一步是列出要用于字段的名称,并使用 for 循环将其提供给您的算法

.... 
List<string> names = "x,y,z";

for(int i=0;i < names.length();i++)
{
 wordApp.ActiveDocument.ContentControls[i] = BindControlsOperation(wordApp.ActiveDocument.ContentControls[i],name[i])
}

希望这可以帮助

于 2015-06-09T18:49:41.647 回答