PPTX ファイルには、スライドの中身とは別に ドキュメントプロパティ と呼ばれるメタデータが格納されています。タイトル、作成者、会社名、キーワードといった情報がこれにあたり、ファイルを開かなくても「誰が・何のために作った資料なのか」を判断する手がかりになります。社内のドキュメント管理や検索、あるいは配布前の情報整理といった場面では、このプロパティをコードからまとめて扱えると便利です。
本記事では、Spire.Presentation for Python を使用して Python で PowerPoint のドキュメントプロパティを追加・読み取り・削除する方法 を解説します。同じ操作を 3 つのセクションに分けて、実行結果とあわせて紹介します。
クイックナビゲーション
- Spire.Presentation for Python のインストール
- 前提知識:標準プロパティとカスタムプロパティ
- Python で PowerPoint にドキュメントプロパティを追加する
- Python で PowerPoint のドキュメントプロパティを読み取る
- Python で PowerPoint からドキュメントプロパティを削除する
- まとめ
- FAQ
Spire.Presentation for Python のインストール
本記事のコードは Spire.Presentation for Python と plum-dispatch v1.7.4 を使用します。pip コマンドでインストールしてください。
pip install Spire.Presentation
スクリプト側では次の 2 行をインポートします。
from spire.presentation.common import *
from spire.presentation import *
手動でインストールする場合は、Spire.Presentation for Python のダウンロードページ からパッケージを取得できます。
前提知識:標準プロパティとカスタムプロパティ
ドキュメントプロパティは、あらかじめ用途が決まっている 標準プロパティ と、利用者が自由に定義する カスタムプロパティ の 2 種類に分かれます。この違いを押さえておくと、以降のコードが読みやすくなります。
| 種類 | 例 | 扱い方 |
|---|---|---|
| 標準プロパティ | タイトル、作成者、件名、キーワード、会社名 | DocumentProperty.Title などの専用プロパティで読み書きする |
| カスタムプロパティ | 文書ID、承認者、承認日など業務独自の項目 | set_Item() で追加、GetPropertyName() と get_Item() で取得、Remove() で削除する |
標準プロパティは PowerPoint の「情報」画面に最初から表示される項目で、テンプレートに沿った一般的なメタデータを記述するのに向いています。一方のカスタムプロパティは項目名そのものを自分で決められるため、「文書ID」「承認者」のように、既定の項目では表現できない業務固有の情報を埋め込むのに適しています。
Spire.Presentation for Python では、この両方を DocumentProperty クラス(Presentation.DocumentProperty プロパティで取得)ひとつで扱えます。
Python で PowerPoint にドキュメントプロパティを追加する
標準プロパティは DocumentProperty.Title、DocumentProperty.Subject といった専用プロパティに値を代入するだけで設定できます。カスタムプロパティの場合は DocumentProperty.set_Item(name, value) メソッドを使い、項目名と値をペアで渡します。値は String、Int32、DateTime などの型で指定するため、数値や日付もそのまま格納できます。項目名・値ともに日本語の文字列をそのまま扱えるので、日本語環境のテンプレートに合わせたメタデータも問題なく設定できます。
from spire.presentation.common import *
from spire.presentation import *
# Presentation オブジェクトを作成
presentation = Presentation()
# PowerPoint ドキュメントを読み込む
presentation.LoadFromFile("Sample.pptx")
# DocumentProperty オブジェクトを取得
documentProperty = presentation.DocumentProperty
# 標準ドキュメントプロパティを設定
documentProperty.Title = "年間売上プレゼンテーション"
documentProperty.Subject = "業績と販売戦略"
documentProperty.Author = "山田 太郎"
documentProperty.Manager = "佐藤 花子"
documentProperty.Company = "株式会社アイスブルー"
documentProperty.Category = "業務"
documentProperty.Keywords = "売上, 戦略, 業績"
documentProperty.Comments = "金曜日までにレビューとフィードバックをお願いします"
# カスタムドキュメントプロパティを追加
documentProperty.set_Item("文書ID", Int32(12))
documentProperty.set_Item("承認者", String("製品マネージャー"))
documentProperty.set_Item("承認日", DateTime(2024, 1, 10, 0, 0, 0, 0))
# ファイルに保存
presentation.SaveToFile("Properties.pptx", FileFormat.Pptx2019)
presentation.Dispose()

保存したファイルを PowerPoint で開き、[ファイル]→[情報]→[プロパティ]→[詳細プロパティ]を確認すると、設定した値が反映されているはずです。標準プロパティは「概要」タブに、カスタムプロパティは「ユーザー設定」タブにそれぞれ表示されます。
なお、Presentation.DocumentProperty の Count プロパティは カスタムプロパティの件数のみ を返します。標準プロパティをいくつ設定しても Count は 0 のままで、上のコードでカスタムプロパティを 3 つ追加した後に 3 になります。
Python で PowerPoint のドキュメントプロパティを読み取る
標準プロパティの取得は、設定時と同じプロパティを参照するだけです。カスタムプロパティは項目名が固定ではないため、まず DocumentProperty.GetPropertyName(index) メソッドに添字を渡して名前を取り出し、その名前を DocumentProperty.get_Item(name) メソッドに渡して値を取得する、という 2 段階の手順になります。
from spire.presentation.common import *
from spire.presentation import *
# Presentation オブジェクトを作成
presentation = Presentation()
# PowerPoint ドキュメントを読み込む
presentation.LoadFromFile("Properties.pptx")
# DocumentProperty オブジェクトを取得
documentProperty = presentation.DocumentProperty
# 標準ドキュメントプロパティを取得
print("Title: " + documentProperty.Title)
print("Subject: " + documentProperty.Subject)
print("Author: " + documentProperty.Author)
print("Manager : " + documentProperty.Manager)
print("Company: " + documentProperty.Company)
print("Category: " + documentProperty.Category)
print("Keywords: " + documentProperty.Keywords)
print("Comments: " + documentProperty.Comments)
# カスタムドキュメントプロパティの件数を取得
count = documentProperty.Count
print("Custom property count: " + str(count))
# カスタムプロパティをループ処理
for i in range(count):
# カスタムプロパティの名前を取得
customPropertyName = documentProperty.GetPropertyName(i)
# カスタムプロパティの値を取得
customPropertyValue = documentProperty.get_Item(customPropertyName)
# 結果を出力
print(customPropertyName + ": " + str(customPropertyValue))
実行すると、コンソールに次のように出力されます。
Title: 年間売上プレゼンテーション
Subject: 業績と販売戦略
Author: 山田 太郎
Manager : 佐藤 花子
Company: 株式会社アイスブルー
Category: 業務
Keywords: 売上, 戦略, 業績
Comments: 金曜日までにレビューとフィードバックをお願いします
Custom property count: 3
承認日: 2024/1/10 0:00:00
承認者: 製品マネージャー
文書ID: 12

ここで注目したいのが、出力の並び順です。追加した順は「文書ID → 承認者 → 承認日」でしたが、取得結果は「承認日 → 承認者 → 文書ID」となっています。これは Spire.Presentation がカスタムプロパティを 項目名の昇順 で保持しているためで、追加した順序は保たれません(日本語の項目名でも同じで、文字コード順に並びます)。添字から名前を引く処理を書くときは、順序を決め打ちしないようにしてください。
また、get_Item() の戻り値は文字列とは限らないため、上のコードのように str() で変換してから連結すると安全です。日本語の項目名・値もそのまま取得でき、コンソール表示が文字化けすることはありません。
Python で PowerPoint からドキュメントプロパティを削除する
削除は 2 種類で考え方が異なります。標準プロパティには削除用のメソッドが用意されていないため、空文字列を代入して値を空にする という方法を取ります。一方、カスタムプロパティは DocumentProperty.Remove(name) メソッドで項目ごと削除できます。
from spire.presentation.common import *
from spire.presentation import *
# Presentation オブジェクトを作成
presentation = Presentation()
# PowerPoint ドキュメントを読み込む
presentation.LoadFromFile("Properties.pptx")
# DocumentProperty オブジェクトを取得
documentProperty = presentation.DocumentProperty
# 標準ドキュメントプロパティを空文字列に設定
documentProperty.Title = ""
documentProperty.Subject = ""
documentProperty.Author = ""
documentProperty.Manager = ""
documentProperty.Company = ""
documentProperty.Category = ""
documentProperty.Keywords = ""
documentProperty.Comments = ""
# カスタムドキュメントプロパティの件数を取得
i = documentProperty.Count
while i > 0:
# カスタムプロパティの名前を取得
customPropertyName = documentProperty.GetPropertyName(i - 1)
# カスタムプロパティを削除
documentProperty.Remove(customPropertyName)
i = i - 1
# 別の pptx ファイルとして保存
presentation.SaveToFile("RemoveProperties.pptx", FileFormat.Pptx2019)
presentation.Dispose()

カスタムプロパティを削除する際は、添字を 末尾から先頭に向かって 減らしていくのがポイントです。Remove() を実行するとコレクションの要素が詰められて添字がずれるため、先頭から削除していくと削除されずに残る項目が出てしまいます。上のコードのように i - 1 から順に処理すれば、すべての項目を確実に削除できます。
まとめ
本記事では、Spire.Presentation for Python を使用して Python で PowerPoint のドキュメントプロパティを追加・読み取り・削除する方法 を解説しました。
- 追加:標準プロパティは
DocumentProperty.Titleなどの専用プロパティに代入し、カスタムプロパティはset_Item(name, value)で追加する - 読み取り:標準プロパティは同じプロパティを参照し、カスタムプロパティは
GetPropertyName(index)で名前を取得してからget_Item(name)で値を取得する - 削除:標準プロパティは空文字列を代入し、カスタムプロパティは
Remove(name)で項目ごと削除する
ドキュメントプロパティを自動で整備しておくと、大量の資料に対するメタデータの統一、配布前の個人情報や社内情報の除去、文書管理システムへの取り込みといった作業を効率化できます。
Spire.Presentation for Python の全機能を評価したい場合は、30 日間の無料ライセンスを申請できます。
FAQ
標準プロパティとカスタムプロパティはどう使い分ければよいですか?
タイトルや作成者など PowerPoint に最初から用意されている項目は標準プロパティとして設定します。既定の項目では表現できない業務固有の情報(文書ID、承認者、承認日など)は、カスタムプロパティとして追加します。
日本語の項目名や値を設定できますか?
はい。set_Item() の項目名・値ともに日本語の文字列をそのまま指定できます。標準プロパティも同様で、PowerPoint の[詳細プロパティ]画面やコンソール出力に日本語のまま反映されます。
カスタムプロパティは追加した順に並びますか?
いいえ。項目名の昇順で保持されるため、追加した順序とは一致しません。添字で名前を取得するコードでは並び順を前提にせず、count を基準に処理してください。
カスタムプロパティの件数はどのように取得しますか?
Presentation.DocumentProperty の Count プロパティで取得できます。この値はカスタムプロパティのみを対象としており、標準プロパティは含まれません。
標準プロパティを完全に削除することはできますか?
標準プロパティには削除用のメソッドが用意されていないため、documentProperty.Title = "" のように空文字列を代入して値を空にします。
カスタムプロパティにはどのような型の値を格納できますか?
set_Item() の第 2 引数に String、Int32、DateTime などの型で値を渡せます。数値や日付も型を保ったまま格納され、読み取り時には対応する値として取得できます。
カスタムプロパティを削除するとき、注意すべき点はありますか?
Remove() を実行するとコレクションの添字が詰められるため、先頭から順に削除すると項目が残ってしまいます。GetPropertyName(count - 1) から始めて添字を減らしながら削除してください。






