openpyxlでエラー:'NoneType' object has no attribute 'style'が出た時

- Python -
2021.09.28
Python[パイソン]

Pythonのopenpyxlでエクセルを読み込もうとした時に、以下エラーが出た時の対処法をメモしておきます。根本的な原因究明はできていないので悪しからず。

・・・
if side.style is None:

AttributeError: 'NoneType' object has no attribute 'style'

エラーが出ていた時の実行時に出力されたログ全文はこれです。

~$ python excel_read.py

Traceback (most recent call last):
File "excel_read.py", line 143, in <module>
reader = Reader()
File "excel_read.py", line 33, in __init__
self.read_excel()
File "excel_read.py", line 47, in read_excel
self.wb = openpyxl.load_workbook(self.target_excel_path)
File "/usr/local/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 317, in load_workbook
reader.read()
File "/usr/local/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 282, in read
self.read_worksheets()
File "/usr/local/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 228, in read_worksheets
ws_parser.bind_all()
File "/usr/local/lib/python3.8/site-packages/openpyxl/worksheet/_reader.py", line 443, in bind_all
self.bind_merged_cells()
File "/usr/local/lib/python3.8/site-packages/openpyxl/worksheet/_reader.py", line 380, in bind_merged_cells
self.ws._clean_merge_range(mcr)
File "/usr/local/lib/python3.8/site-packages/openpyxl/worksheet/worksheet.py", line 607, in _clean_merge_range
mcr.format()
File "/usr/local/lib/python3.8/site-packages/openpyxl/worksheet/merge.py", line 109, in format
if side.style is None:
AttributeError: 'NoneType' object has no attribute 'style'

openpyxlで'NoneType' object has no attribute 'style'が出た時

結論、「openpyxlのバージョンを3.0.4でインストールしなおす」ということで解消しました。

まず、pip freezeで現在インストールされているopenpyxlを確認したら、以下のようにバージョン3.0.6となっていました。

~ $ pip freeze
... 省略
numpy==1.20.0
oauth2client==4.1.3
oauthlib==3.1.0
openpyxl==3.0.6
pandas==1.2.1
protobuf==3.14.0
... 省略
~ $

これを、3.0.4でインストールしなおします。

pip install openpyxl==3.0.4

~ $ pip install openpyxl==3.0.4
Collecting openpyxl==3.0.4
Downloading openpyxl-3.0.4-py2.py3-none-any.whl (241 kB)
|████████████████████████████████| 241 kB 15.7 MB/s
Requirement already satisfied: et-xmlfile in /usr/local/lib/python3.8/site-packages (from openpyxl==3.0.4) (1.0.1)
Requirement already satisfied: jdcal in /usr/local/lib/python3.8/site-packages (from openpyxl==3.0.4) (1.4.1)
Installing collected packages: openpyxl
Attempting uninstall: openpyxl
Found existing installation: openpyxl 3.0.6
Uninstalling openpyxl-3.0.6:
Successfully uninstalled openpyxl-3.0.6
Successfully installed openpyxl-3.0.4
WARNING: You are using pip version 20.2.4; however, version 21.2.4 is available.
You should consider upgrading via the '/usr/local/opt/python@3.8/bin/python3.8 -m pip install --upgrade pip' command.
~ $

これでプログラムを再実行したらエラーが出ずに無事実行できるようになりました。

参考記事Streamskill and loading a workbook using openpyxl

↑TOP