teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

質問の意図に沿って修正

2021/04/08 11:54

投稿

t_obara
t_obara

スコア5488

answer CHANGED
@@ -10,4 +10,31 @@
10
10
 
11
11
  ```
12
12
  一つのファイルの場合、上記のコードでスライドレイアウト名称と参照されているスライドの数が列挙できます。
13
- これをベースにすれば、複数のスライドでも、スライドレイアウト名称でカウントアップしていけば、全体の参照カウントを行うことができるでしょう。
13
+ これをベースにすれば、複数のスライドでも、スライドレイアウト名称でカウントアップしていけば、全体の参照カウントを行うことができるでしょう。
14
+
15
+ すいません、質問の意図を読み違えていました。
16
+ スライドマスターの名称はAPIとして用意されていないようなので、内部XMLから読み出す必要がありました。
17
+ 以下のような感じでいかがでしょう。
18
+
19
+ ```python
20
+ import pptx
21
+ from pptx.opc.constants import CONTENT_TYPE as CT, RELATIONSHIP_TYPE as RT
22
+ from pptx.opc.oxml import parse_xml
23
+
24
+ def count_slide_layouts(slide_layouts):
25
+ count = 0
26
+ for layout in slide_layouts:
27
+ uslides = layout.used_by_slides
28
+ count += len(uslides)
29
+
30
+ return count
31
+
32
+ prs = pptx.Presentation(pptx_file)
33
+
34
+ for master in prs.slide_masters:
35
+ mpart = master.part
36
+ tpart = mpart.part_related_by(RT.THEME)
37
+ xml = parse_xml(tpart.blob)
38
+ cnt = count_slide_layouts(master.slide_layouts)
39
+ print(f"{xml.attrib['name']}: {cnt}")
40
+ ```