0

私は最近、PowerPoint プレゼンテーションを自動的に生成することを期待して、OpenXML SDK を掘り下げ始めました。プロセス全体が苦痛であることに気づき、週末の大部分と最後の 2 日間を生の SDK 呼び出しを処理するライブラリの生成に費やしました。生成プロセス中はすべて問題なく動作しているようで、Open XML SDK Productivity Tool でコードが正しいことを検証できます。ただし、PowerPoint でファイルを開くと、ファイルを開く前にファイルを修正するように求めるダイアログ ボックスが表示されます。

このコードはすべて、PowerPoint で作成したファイルから反映したものからリファクタリングされています。/ppt/slideLayouts/slideLayouts/生産性向上ツールでこれらのパッケージとの違いを実行すると、スライド レイアウト (最初のものを除く) が であるのに対し、正しいプレゼンテーションでは であることがわかりました/ppt/slideLayouts/。生成コードをトリプルチェックしたところ、SlideLayout がPresentationPartではなく に追加されましたSlideLayoutPart。最初のレイアウトは正しい場所にあり、その後のレイアウトはそうでないため、特に奇妙です。

MSDN のドキュメントと、Wouter van Vugt による Open XML の電子書籍を読みました。自分のコードを反映されたコードと比較したところ、正しいように見えました (ただし、Open XML に慣れていないことと、PresentationML の複雑さを考慮すると、多くのことを見逃している可能性があります)。ここで何が起こっているのかについての洞察を持っている人はいますか?

4

1 に答える 1

2

試行錯誤の末、ようやく問題が見つかりました。プレゼンテーションのすべてのスライドについて、次の手順に従いました。

  • SlidePartに追加PresentationPart
  • SlideLayoutPartに追加SlidePart
  • SlideMasterPartに追加SlideLayoutPart
  • ThemePartに追加SlideMasterPart
  • スライド マスターを初めて使用する場合は、レイアウトに循環参照を追加します。

SlideLayoutPartSlideMasterPart最初に追加すると、質問で概説したパスの問題が発生するため、OpenXML SDK にバグがあるはずです。これが、最初のレイアウトが常に正しく機能する理由です (最初にスライドに追加されました)。最初の 4 つの箇条書きが 1 つのループに存在し、別のループがすべてのマスターを実行して関連するすべてのレイアウトを検索し、使用されているレイアウトのみをリンクするように、コードを配置しました。

検証エラーはなく、PowerPoint は最初の試行でファイルを完全に開きます。

于 2014-02-27T03:16:19.140 に答える