共有フォルダに置かれたブックが増えてくると、ファイル名だけでは「これは何年度の、誰が作った資料なのか」が分からなくなります。1 つずつ開いて確かめるしかない——という状態は、探す側にとっても作る側にとっても負担です。
Excel のドキュメント プロパティは、こうした「ファイルを開かずに分かる情報」を埋め込むための仕組みです。タイトルや作成者、業務固有の管理番号などを入れておけば、エクスプローラーや Excel の[詳細プロパティ]から内容を確認でき、検索や並べ替えの手がかりにもなります。定型的なレポートを毎回生成しているなら、プロパティの付与まで一緒に自動化してしまいましょう。
本記事では、Spire.XLS for Python を使用して Python で Excel にドキュメント プロパティを追加する方法 を解説します。
クイックナビゲーション
はじめに:環境とサンプル ブック
本記事のコードは Spire.XLS for Python で動作を確認しています(検証環境は Spire.XLS for Python 16.8.2 / plum-dispatch v1.7.4)。インストールは pip コマンドで行います。
pip install Spire.XLS
スクリプト側では、次の 2 行をインポートしてください。
from spire.xls import *
from spire.xls.common import *
手動でセットアップする場合は、Spire.XLS for Python のダウンロード ページからパッケージを取得できます。
プロパティの追加はセルの値に影響しないため、既存のブックをそのまま読み込んで使えます。以降のコードでは、3 年分の売上をまとめた Sample.xlsx(シート名「売上データ」、年度・商品カテゴリ・売上金額の 3 列)を入力として進めます。
標準プロパティを設定する
標準プロパティは、タイトルや作成者など Excel 側であらかじめ項目名が決まっている プロパティです。項目名そのものは編集できませんが、値は自由に設定できます。Spire.XLS for Python では Workbook.DocumentProperties プロパティ(BuiltInDocumentProperties クラス)から取得し、項目ごとのプロパティに値を代入します。
作業の流れは次のとおりです。
Workbookオブジェクトを作成するWorkbook.LoadFromFile()メソッドで Excel ブックを読み込むWorkbook.DocumentPropertiesプロパティで標準プロパティを取得する- タイトル、作成者、キーワード、コメントなどに値を代入する
Workbook.SaveToFile()メソッドで保存する
from spire.xls import *
from spire.xls.common import *
inputFile = "Sample.xlsx"
outputFile = "ExcelProperties.xlsx"
# Workbook オブジェクトを作成
workbook = Workbook()
# Excel ブックを読み込む
workbook.LoadFromFile(inputFile)
# 標準プロパティを設定
workbook.DocumentProperties.Title = "2026年度 売上集計レポート"
workbook.DocumentProperties.Subject = "年度別・カテゴリ別の売上推移"
workbook.DocumentProperties.Author = "山田 太郎"
workbook.DocumentProperties.LastAuthor = "山田 太郎"
workbook.DocumentProperties.Keywords = "売上, 集計, 年度別"
workbook.DocumentProperties.Category = "業務"
workbook.DocumentProperties.Company = "株式会社アイスブルー"
workbook.DocumentProperties.Manager = "佐藤 花子"
workbook.DocumentProperties.Comments = "レビュー後に社内共有してください"
# 保存
workbook.SaveToFile(outputFile, FileFormat.Version2016)
workbook.Dispose()
設定した内容は、Excel の[ファイル]→[情報]→[プロパティ]→[詳細プロパティ]を開き、「概要」タブで確認できます。

ここで 1 点だけ補足しておきます。「作成者」と「最終保存者」は別の項目 です。ダイアログでは並んで表示されるため同じものだと誤解しがちですが、Author と LastAuthor は独立しており、片方だけを設定しても他方は元の値のまま残ります。既存のブックを流用する場合、Author だけを書き換えると最終保存者には元の名前が残ってしまうので、両方をまとめて設定しておくのが安全です。
カスタム プロパティを追加する
カスタム プロパティは、項目名から自分で決められる プロパティです。[ファイル]→[情報]→[プロパティ]→[詳細プロパティ]の「ユーザー設定」タブに並び、標準プロパティでは表現できない業務固有の情報を埋め込めます。
コレクションは Workbook.CustomDocumentProperties プロパティ(ICustomDocumentProperties クラス)で取得し、Add(名前, 値) メソッドで追加します。
from spire.xls import *
from spire.xls.common import *
inputFile = "Sample.xlsx"
outputFile = "ExcelCustomProperties.xlsx"
# Workbook オブジェクトを作成
workbook = Workbook()
# Excel ブックを読み込む
workbook.LoadFromFile(inputFile)
# データ型の異なるカスタム プロパティを追加
workbook.CustomDocumentProperties.Add("部署コード", "SALES-01")
workbook.CustomDocumentProperties.Add("予算改訂回数", 3)
workbook.CustomDocumentProperties.Add("機密区分", True)
workbook.CustomDocumentProperties.Add("為替レート", 157.25)
workbook.CustomDocumentProperties.Add("承認日", DateTime(2026, 4, 1, 0, 0, 0, 0))
# 保存
workbook.SaveToFile(outputFile, FileFormat.Version2016)
workbook.Dispose()

Add() の第 2 引数に渡した Python の値は、そのままの型で Excel に格納されます。文字列・整数・真偽値・小数・日付をそれぞれ渡すと、String / Int / Bool / Double / DateTime として保存され、[詳細プロパティ]の「ユーザー設定」タブでも型が保たれた状態で表示されます。
日付を日付として登録したい場合は、文字列ではなく DateTime オブジェクトを渡してください。DateTime(年, 月, 日, 時, 分, 秒, ミリ秒) の形式で組み立てます。"2026-04-01" のような文字列を渡すと、日付ではなく文字列として登録されてしまいます。
同じ名前で追加したときの挙動
Add() という名前からは新規登録のイメージを持ちますが、すでに同じ名前のプロパティが存在する場合は、追加ではなく値の上書き になります。次のコードで動作を確認してみましょう。
workbook.CustomDocumentProperties.Add("部署コード", "SALES-01")
workbook.CustomDocumentProperties.Add("予算改訂回数", 3)
# 同じ名前でもう一度 Add する
workbook.CustomDocumentProperties.Add("予算改訂回数", 4)
同名のプロパティをもう一度 Add した場合
1 回目の Add 直後 : 予算改訂回数 = 3 (件数 2)
2 回目の Add 直後 : 予算改訂回数 = 4 (件数 2)
値は 4 に置き換わり、プロパティの件数は 2 のままでした。二重登録にはならないため、既存の値を書き換えたいときに Remove() を挟む必要はありません。
ただし、データ型が違っていてもそのまま上書きされます。整数として登録済みの項目に文字列を渡すと、値だけでなく型も Int から String に置き換わります。同じ項目名を使い回す場合は、型を揃えて運用するか、最初から項目名を分けておくのが無難です。
ブックを最終版としてマークする
カスタム プロパティの 1 つである _MarkAsFinal を使うと、ブックを「最終版」として扱わせることができます。専用の API はなく、Add() に True を渡すだけです。
workbook.CustomDocumentProperties.Add("_MarkAsFinal", True)
この状態で保存したファイルを Excel で開くと、ブックは読み取り専用として開かれ、最終版としてマークされていることが示されます。

_MarkAsFinal は「これ以上編集しない」という意思表示のフラグです。開いたときにその旨が通知されるだけで、内容の変更を技術的に禁止するものではありません。第三者による改変を確実に防ぎたい場合は、パスワードによる保護と組み合わせてください。
まとめ
本記事で扱った内容を整理します。
- 標準プロパティ —
Workbook.DocumentPropertiesの各プロパティに値を代入します。項目名は固定で、作成者(Author)と最終保存者(LastAuthor)は別項目です - カスタム プロパティ —
Workbook.CustomDocumentProperties.Add(名前, 値)で追加します。文字列・整数・真偽値・小数・日付は、それぞれの型で保存されます - 同名の追加 —
Add()を同じ名前で呼ぶと、新規登録ではなく値の置き換えになります。値だけでなく型も置き換わる点に注意してください - 最終版マーク —
_MarkAsFinalにTrueを追加するだけで、Excel 側では読み取り専用の「最終版」として扱われます
設定した標準プロパティとカスタム プロパティは、いずれも[詳細プロパティ]ダイアログの「概要」タブと「ユーザー設定」タブから確認できます。定型レポートを生成するスクリプトに組み込んでおけば、ファイル名だけでは伝わらない情報を、生成した時点で確実に埋め込めます。
Spire.XLS for Python の全機能を評価したい場合は、30 日間の無料ライセンスを申請できます。
FAQ
追加したプロパティは Excel のどの画面で確認できますか?
[ファイル]→[情報]→[プロパティ]→[詳細プロパティ]で開くダイアログで確認できます。標準プロパティは「概要」タブ、カスタム プロパティは「ユーザー設定」タブに分かれて表示されるため、両方を見てください。
カスタム プロパティの値にはどのような型を格納できますか?
String、Int、Double、Bool、DateTime を扱えます。Add() に渡した Python の値から型が自動的に決まり、そのままの型で保存されるため、[詳細プロパティ]の「ユーザー設定」タブでも型が保たれた状態で表示されます。日付を日付として登録したい場合は、文字列ではなく DateTime オブジェクトを渡してください。
既存のカスタム プロパティの値を書き換えるにはどうすればよいですか?
同じ名前を指定して Add() を呼び出すだけです。値が置き換わり、件数は増えません。ただし型も一緒に上書きされるため、書き換え後も同じ型で扱いたい場合は、渡す値の型を揃えておいてください。
「最終保存者」だけを別の名前にすることはできますか?
できます。最終保存者は DocumentProperties.LastAuthor に対応し、作成者を表す Author とは独立して設定できます。両方に同じ値を入れておくか、作成者と最終保存者を意図的に分けるかは運用次第です。
_MarkAsFinal を設定すると、セルの編集を禁止できますか?
できません。ブックを開いたときに読み取り専用として扱われ、最終版であることが通知されるだけです。編集しようと思えば解除できます。改変を確実に防ぎたい場合は、パスワードによる保護を併用してください。
.xls(Excel 97-2003 形式)で保存しても問題ありませんか?
保存自体はできますが、保存した .xls を Spire.XLS for Python で読み戻すと、カスタム プロパティの項目名が末尾 2 文字欠けて 読み取られました。英語名でも同じで、Department は Departme、日本語名では 部署コード が 部署コ になりました。Excel で開いた場合は項目名は正しく表示されるため、読み取り側の挙動によるものです。日本語の項目名を使う場合は .xlsx 形式で保存し、読み取りは同じ形式で行うようにしてください。






