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 に答える