2

python-pptx を使用して、折れ線グラフと棒グラフの両方で構成されるグラフを作成する必要があります。ドキュメントに基づいて、次のように述べられていました。

「ほとんどのチャートには 1 つのプロットしかなく、python-pptx はマルチプロット チャートの作成をまだサポートしていませんが、既にプロットされているチャートで複数のプロットにアクセスできます。」

http://python-pptx.readthedocs.io/en/latest/user/charts.html

それはまだ当てはまりますか?回避策はありますか? テンプレートでグラフを事前に作成し、後で値を更新するだけでなく、テンプレートでグラフのプレースホルダーを使用してグラフの作成を自動化することを主に好みます。最初のアプローチは、私が現在持っている他のすべての PowerPoint オートメーションとより一貫性があります。

4

1 に答える 1

3

python-pptx でいわゆる「マルチプロット」チャートを作成することは、API レベルではまだサポートされていません。したがって、それを実行したい場合は、その部分の独自のコードを作成する必要があります。

ただし、python-pptx の内部では、追加のプロットを追加した後にフル アクセスを提供するなど、多くのサポートを提供できます。

完全なレシピは、この Q&A 形式を超えて拡張されますが、一般的な要点は次のとおりです。

  • PowerPoint プレゼンテーションは、本質的に大きな XML 階層です。一般的な戦略は、適切な親要素への道を見つけ、利用可能な最善の手段を使用して、適切な子 XML 階層 (新しいプロットを表す) をその親要素に追加することです。

  • そのため、関心のある近隣でマルチプロット XML 階層がどのように見えるかを発見することから始めたいと考えています。これには opc-diag が役立ちます。折れ線と棒などの 2 つのプロットを持つチャートを使用して、1 枚のスライドのプレゼンテーションを作成します。opc-diag を使用してパーツをダンプし、要素と要素chart1.xmlを検索します。折れ線グラフから始める場合、そこにある要素を追加することがあなたの仕事になります。これで、目的が明確にわかります。lineChartbarChartbarChart

  • その親要素を取得するには、python-pptx を使用します。c:plotAreaこの場合、それは要素だと思います。で入手できますchart.plots._plotArea。これは、BaseOxmlElementそれ自体が_Elementfrom lxml のサブクラスであるサブクラスになります。したがって、これらの操作はすべて自由に使用できます。「python-pptx workaround function」を検索すると、いくつかの例が見つかります。ここでちょっとした便利なヒントとして、.xmlプロパティを使用して任意の要素オブジェクトの XML をダンプできます。これは、XML 操作の呼び出しを学習する際に進捗状況を追跡するのに非常に役立ちます。

  • 次に、新しい子要素を構築し、適切な場所で親に追加します。おそらく .append()、場合によっては .insert() を使用します。別のアプローチは、ダミーの棒グラフを追加し、そのc:barChart要素を見つけ、deepcopy() を実行して追加することです。それが機能する場合、内部の作業ははるかに少なくなります。

とにかく、それがあなたにアイデアを与えることを願っています。おそらくおわかりのように、気弱な人向けではありませんが、Python のチョップを持っていた多くの人々は、このアプローチで必要なものを手に入れることができました。

于 2016-08-17T19:12:26.363 に答える