Openpyxlでエクセルファイルのプロパティを編集する
Openpyxlでエクセルファイルのプロパティを編集してみました。
2025.02.05
プログラムでエクセルファイルを作成・編集するとき、ふと思いました。エクセルのプロパティはどうなっているんだろうと。試してみました。
はじめに
おすすめの方
- ExcelをPythonで操作したい方
- ExcelのプロパティをPythonで編集したい方
openpyxlのインストール
pip install openpyxl
プロパティの一覧を把握する
次のコードを実行すると、プロパティの一覧が表示されました。
from openpyxl import Workbook
def main():
wb = Workbook()
print(wb.properties)
wb.save("output1.xlsx")
if __name__ == "__main__":
main()
下記は、見やすいように改行しています。これらの編集が可能みたいですね。
<openpyxl.packaging.core.DocumentProperties object>
Parameters:
creator='openpyxl'
title=None
description=None
subject=None
identifier=None
language=None
created=datetime.datetime(2025, 1, 21, 10, 41, 49, 94804)
modified=datetime.datetime(2025, 1, 21, 10, 41, 49, 94804)
lastModifiedBy=None
category=None
contentStatus=None
version=None
revision=None
keywords=None
lastPrinted=None
プロパティを編集する
上記のプロパティを編集してみます。ついでに、すべてNoneを入れて削除も試してみます。
from openpyxl import Workbook
from datetime import datetime
def main():
wb1 = Workbook()
set_property(wb1)
wb1.save("output1.xlsx")
clear_property(wb1)
wb1.save("output1_clear.xlsx")
wb2 = Workbook()
clear_property(wb2)
wb2.save("output2_clear.xlsx")
def set_property(wb):
wb.properties.creator = "Genki Fujii"
wb.properties.title = "これはタイトルです"
wb.properties.description = "これは説明です"
wb.properties.subject = "これはサブジェクトです"
wb.properties.identifier = "これは識別子です"
wb.properties.language = "ja-JP"
wb.properties.created = datetime(2020, 1, 2, 3, 4, 5)
wb.properties.modified = datetime(2021, 2, 3, 4, 5, 6)
wb.properties.lastModifiedBy = "lastModifiedBy Genki Fujii 222"
wb.properties.category = "これはカテゴリです。"
wb.properties.contentStatus = "コンテンツステータス"
wb.properties.version = "777"
wb.properties.revision = "999"
wb.properties.keywords = "これは, キーワード,です"
wb.properties.lastPrinted = datetime(2022, 3, 4, 5, 6, 7)
def clear_property(wb):
wb.properties.creator = None
wb.properties.title = None
wb.properties.description = None
wb.properties.subject = None
wb.properties.identifier = None
wb.properties.language = None
# wb.properties.created = None # これは None にできなかった
wb.properties.modified = None
wb.properties.lastModifiedBy = None
wb.properties.category = None
wb.properties.contentStatus = None
wb.properties.version = None
wb.properties.revision = None
wb.properties.keywords = None
wb.properties.lastPrinted = None
if __name__ == "__main__":
main()
プロパティを編集した結果(output1.xlsx)
更新日時は、設定した値ではなく、保存した日時になりました。時刻は+9時間されています。
プロパティを編集したあと、削除した結果(output1_clear.xlsx)
作成日時以外は消えています。
プロパティを編集せず、削除した結果(output2_clear.xlsx)
作成日時と更新日時は、保存した日時になっています。