実現したいこと
以下のコードでexcelファイルのプロパティを一括削除した際、シート内の書式(取り消し線や太字など)がクリアされてしまうため、書式クリアせずプロパティ削除を行いたい。
発生している問題・分からないこと
書式クリアされない方法を知りたい
該当のソースコード
python
1# coding: utf -8 2from tkinter import filedialog 3import os 4import openpyxl 5 6 7def main(): 8 # 対象のフォルダパス取得 9 fTyp = [("", "*")] 10 iDir = os.path.abspath(os.path.dirname(__file__)) 11 folder_path = filedialog.askdirectory( initialdir=iDir , title="対象のフォルダを選択" ) 12 serch_file(folder_path) 13 return 14 15 16def serch_file(path): 17 with os.scandir(path) as it: 18 for entry in it: 19 # 対象ファイルがディレクトリ 20 if entry.is_dir(): 21 # 再起処理による検索 22 serch_file(entry.path) 23 # 対象ファイルがディレクトリ以外 24 elif entry.is_file(): 25 if ".xlsx" in entry.name: 26 delete_properties(entry.path) 27 print(entry.path) 28 return 29 30 31def delete_properties(path): 32 # Excelファイルの読み込み 33 wb = openpyxl.load_workbook(path) 34 props = wb.properties 35 # プロパティ情報を削除する 36 # 説明 37 props.title=None 38 props.subject=None 39 props.keywords=None 40 props.category=None 41 props.description=None 42 # 元の場所 43 props.creator=None 44 props.lastModifiedBy=None 45 props.revision=None 46 props.version=None 47 # コンテンツ 48 props.contentStatus=None 49 props.language=None 50 # Excelファイルの保存 51 wb.save(path) 52 return 53 54if __name__ == '__main__': 55 main()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
teratail、googleで検索したが、解決方法が見つからなかった。
補足
ソースは以下のサイトを参考にさせていただきました。
https://telecom-engineer.blog/blog/2023/05/02/excel-properties/
試したところ、Windows 11、Python 3.12.3、openpyxl 3.1.2、Microsoft 365の環境で、正しく動作しました。
ソースは正しいと思います。
プロパティが削除されるのは確認しております。
シート内の書式がクリアされてしまう問題を解決したいのです。
自分の実行環境は以下になります。
Windows 10、Python 3.12.2、openpyxl 3.1.2、Microsoft office 2021
> プロパティが削除されるのは確認しております。
他人がその確認を再現できるレベルで記述しましょう。
trouble_maker77さん
もちろん、書式がクリアされないことも確認しています。
ちなみに、Windows 10、Python 3.12.2、openpyxl 3.1.2、Microsoft 365の環境でも正しく動作しました。
提示されたソース以外に原因があると思われます。

回答3件
あなたの回答
tips
プレビュー