4

私はopen xml SDK 2.0を使用していますが、これは初めてです。

「hello.docx」という名前の Word 2007 ドキュメントで、実際にクイックパーツ (コンテンツ コントロールを含む) を作成しました。ここで、「hello.docx」という名前の同じドキュメントの別の場所にクイックパーツをコピーする必要があります。私はこの投稿http://www.techques.com/question/1-3448297/Replaceing-Content-Controls-in-OpenXMLに非常に感謝しており、同じことがスタック オーバーフロー フォーラムに投稿されており、非常に感謝しています。 )...この投稿は、コンテンツ コントロールを削除するだけで、コンテンツはコンテンツ コントロールに保持します。

上記のリンクの助けを借りて、コードを変更してコンテンツ コントロールを複製し、同じドキュメントに追加することができました (コードのこの部分は機能しています)。しかし、私はinnerTextに問題があります。開いている Xml 要素の innerText を置き換えたのですが、ドキュメントに反映されません。

public static void AddingSdtBlock(string filename, string sdtBlockTag)
{
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filename,true))
    {
        MainDocumentPart mainDocumentPart = doc.MainDocumentPart;
        List<SdtBlock> sdtList = mainDocumentPart.Document.Descendants<SdtBlock>().ToList();
        SdtBlock sdtA = null;

        foreach (SdtBlock sdt in sdtList)
        {
            if (sdt.SdtProperties.GetFirstChild<Tag>().Val.Value == sdtBlockTag)
            {
                sdtA = sdt;
                break;
            }
        }
        SdtBlock cloneSdkt = (SdtBlock)sdtA.Clone();



        OpenXmlElement sdtc = cloneSdkt.GetFirstChild<SdtContentBlock>();
      //  OpenXmlElement parent = cloneSdkt.Parent;

        OpenXmlElementList elements = cloneSdkt.ChildElements;

       // var mySdtc = new SdtContentBlock(cloneSdkt.OuterXml);

        foreach (OpenXmlElement elem in elements)
        {
          string innerxml=  elem.InnerText ;
          if (innerxml.Length>0)
          {
              string modified = "Class Name : My Class.Description : mydesc.AttributesNameDescriptionMy Attri name.my attri desc.Operations NameDescriptionmy ope name.my ope descriptn.";
             string replace= elem.InnerText.Replace(innerxml, modified);
            // mainDocumentPart.Document.Save();
          }
           // string text = parent.FirstChild.InnerText;
           // parent.Append((OpenXmlElement)elem.Clone());
        }

        mainDocumentPart.Document.Body.AppendChild<SdtBlock>(cloneSdkt);

        //sdtA.Remove();
    }
}

openXML 要素の置換文字列がドキュメントに反映されません。どんな助けでも本当に感謝しています。

前もって感謝します、

4

6 に答える 6

0

ファイルを開くステートメントmainDocumentPart.Document.Save();の最後の行として呼び出す必要があります。usingこれにより、開いているドキュメントに加えた変更が保存されます。

于 2011-08-08T10:40:40.153 に答える
0

私は同じ問題を抱えていました。私の解決策は、最初に交換を行い、次にクローンを作成することです。

于 2012-02-05T22:52:30.027 に答える
0

foreach ループの代わりに for ループを使用し、そのインデクサーを使用して各要素にアクセスする必要があります。

于 2012-03-14T07:17:30.670 に答える