【解決方法】openxml を使用してフッターにテキストを追加する


OpenXML を使用してフッターにテキストを追加する方法を知っている人はいますか? 残念ながら、ドキュメント パーツにテキストを追加する方法を知っていても、フッター/ヘッダーの設定が異なり、対応するパーツがないように見えるため、あまり役に立ちません。

私が試したこと:

FooterPart フッター = _doc.MainDocumentPart.FooterParts.ElementAtOrDefault(0);
段落段落 = footer.AddPart<段落>(段落);

解決策 1

共有として ここ[^]、

引用:

ヘッダーとフッターは MainDocumentPart.Document にはなく、HeaderParts のサブパーツであり、 フッターパーツ[^] コレクション MainDocumentPart[^]. そのため、各パーツを個別に処理する必要があります。 幸いなことに、すべてのパーツが共通の基本クラスを共有しています。 OpenXmlPart[^]、それらをリストにまとめてループで処理できます。 基本クラスを扱うので、使用する必要があります ルート要素[^] 子孫を取得するための開始点として、ドキュメントの代わりにプロパティ。

したがって、最終結果は次のようになります。

C#
var partsToUpdate = new List<OpenXmlPart> { doc.MainDocumentPart }
    .Concat(doc.MainDocumentPart.HeaderParts)
    .Concat(doc.MainDocumentPart.FooterParts);

foreach (var part in partsToUpdate)
{
    var elements = part.RootElement
        .Descendants<SdtElement>()
        .Where(s => s.SdtProperties.ChildElements.Count > 0 &&
                    s.SdtProperties.GetFirstChild<Tag>()?.Val == contentControlTag);

    foreach (var element in elements)
    {
        if (element == null)
        {
            continue;
        }

        var elementText = element.Descendants<Text>();

        if (elementText != null)
        {
            var elementTextValue = elementText.FirstOrDefault();

            if (elementTextValue != null)
            {
                elementTextValue.Text = text;
            }
            elementText.Skip(1).ToList().ForEach(t => t.Remove());
        }
    }
}

コメント

タイトルとURLをコピーしました