3

私はこのルーチンに取り組んでおり、プログラムで「非表示」になっているPowerPointスライドを削除する必要があります。Open XMLについてあまり知らない私は、この方法:プレゼンテーションからスライドを削除する(Open XML SDK)の記事で説明されているように、メソッドがスライドインデックスをパラメーターとして受け取るスライドを元々削除するコードを変更しました。

ただし、SlidePartsコレクションを反復処理すると、デフォルトでは、プレゼンテーションに表示される順序ではなく、最後に編集された順序でスライドが並べ替えられることを学びました。そのためには、OpenXml SDKを使用したSlideParts の反復の記事で提案されているように、SlideIdListを反復処理する必要があります。

SlideListを反復処理するforeachループを含む私のコードでは、非表示のスライドのインデックスを取得するために、スライドのShowプロパティを取得する必要があります。

ループでSlideIdListを使用している場合、Showプロパティを取得する方法を知っている人はいますか?コード内の私のコメントを参照してください。ありがとうございました!リショ。

public static void DeleteSlide(string presentationFile)
    {
        using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
        {
            // Get the presentation part from the presentation document. 
            PresentationPart presentationPart = presentationDocument.PresentationPart;

            // Get the presentation from the presentation part.
            Presentation presentation = presentationPart.Presentation;

            // Get the list of slide IDs in the presentation.
            SlideIdList slideIdList = presentation.SlideIdList;

            int slideIdx = -1;
            foreach (SlideId _slideId in presentation.SlideIdList)
            {
                slideIdx++;

                string relId = _slideId.RelationshipId.Value;

  >>>>>         // Here is where I need to checkf for Slide.Show.HasValue as
                // as the code suggests but this property belongs to a 
                // presentationDocument.PresentationPart.SlideParts object as in
                // foreach(Slide slide in presentationDocument.PresentationPart.SlideParts.

                if (slide.Slide.Show != null)
                {
                    if (slide.Slide.Show.HasValue != null)
                    {


                        // Pass the presentation to the next CountSlide method
                        // and return the slide count.
                        //return CountSlides(presentationDocument);


                        // Get the slide ID of the specified slide
                        SlideId slideId = slideIdList.ChildElements[slideIdx] as SlideId;

                        // Get the relationship ID of the slide.
                        string slideRelId = slideId.RelationshipId;

                        // Remove the slide from the slide list.
                        slideIdList.RemoveChild(slideId);

                        // Removed code that looks for a custom presentation

                        // Save the modified presentation.
                        presentation.Save();

                        // Get the slide part for the specified slide.
                        SlidePart slidePart = presentationPart.GetPartById(slideRelId) as SlidePart;

                        // Remove the slide part.
                        presentationPart.DeletePart(slidePart);
                        break;
                    }
                }
            }

        }
    }
4

1 に答える 1

3

これを投稿してからすぐに、特定のスライドを取得するには、これを行う必要があることに気付きました: SlidePart slidePart = presentationPart.GetPartById(slideRelId) as SlidePart;foreach ループの直前です。

于 2012-11-14T17:43:32.660 に答える