Openpyxlでエクセルファイルのプロパティを編集する

Openpyxlでエクセルファイルのプロパティを編集する

Openpyxlでエクセルファイルのプロパティを編集してみました。
Clock Icon2025.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時間されています。

01_output1

02_output1

プロパティを編集したあと、削除した結果(output1_clear.xlsx)

作成日時以外は消えています。

11_output1_clear

12_output1_clear

プロパティを編集せず、削除した結果(output2_clear.xlsx)

作成日時と更新日時は、保存した日時になっています。

21_output2_clear

22_output2_clear

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.