0

人々は、Linq-to-xml の経験と、openXML ワード文書の構築に関する知識が必要だと思います。

コンテンツ コントロールを見つけるはずのこの Linq to XML クエリがあります。ほとんどの場合は機能しますが、まだ陪審員であり、適切ではないと思います。

私が正しく理解している場合、それがどのように機能するかは、StdRuns をチェックし、そのプロパティにタグという名前のものが含まれているかどうかを確認することです。

問題は、おそらくコンテンツ コントロールが必ずしも RUN の一部ではないことです。たとえば、行の最初に追加された場合。後で問題を起こしたくないので、linq を使用してすべてのコンテンツ コントロールをヒットするより良い方法があるかどうか疑問に思います。

これは、Linq クエリが次のようになったことを示しています。

var cont = from sdt in document.MainDocumentPart.RootElement.Descendants<SdtRun>() 
                       let sdtPr = sdt.GetFirstChild<SdtProperties>()
                       let tag = (sdtPr == null ? null : sdtPr.GetFirstChild<Tag>())
                       where tag != null
                       select new
                       {
                           SdtProps = sdtPr,
                           TagName = tag.GetAttribute("val", sdt.NamespaceUri).Value
                       };

前もって感謝します。

4

1 に答える 1

1

Eric White のブログをご覧ください。彼のサイト全体は、Open XML SDK を使用した関数型プログラミングを学ぶのに非常に適しています。彼のサイトから:

private static void IterateContentControlsForPart(OpenXmlPart part)
{
    XNamespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
    XDocument doc = part.GetXDocument();
    foreach (var sdt in doc.Descendants(w + "sdt"))
    {
        Console.WriteLine("Found content control");
        Console.WriteLine("=====================");
        Console.WriteLine(sdt.ToString());
        Console.WriteLine();
    }
}
于 2010-08-06T13:08:32.083 に答える