Spreadsheet saved with a CustomFilter (string begins with) can't be loaded in openpyxl 3.0.8
Hi openpyxl team, thank you for your hard work on this fantastic library.
The attached file is a minimal example to trigger a bug which stops me loading many spreadsheets since upgrading to openpyxl 3.0.8.
It contains a column with a 'begins with' string filter on it. Poking around in pdb while trying to load it, seems this is a <class 'openpyxl.worksheet.filters.CustomFilter'>. As this is a string column, i'm not sure why openpyxl expects a float.
It works in 3.0.7.
To reproduce:
- Python 3.8.2, Macos and Linux tested
- Use the following file: issue.xlsx
- openpyxl.load_workbook("issue.xlsx")
Output:
File "/Users/desultir/venv/python3.8/site-packages/openpyxl/descriptors/base.py", line 55, in _convert
value = expected_type(value)
ValueError: could not convert string to float: '13051 RITZ CARLTON*'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 322, in load_workbook
reader.read()
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 287, in read
self.read_worksheets()
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 233, in read_worksheets
ws_parser.bind_all()
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/worksheet/_reader.py", line 451, in bind_all
self.bind_cells()
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/worksheet/_reader.py", line 354, in bind_cells
for idx, row in self.parser.parse():
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/worksheet/_reader.py", line 151, in parse
obj = prop[1].from_tree(element)
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
obj = desc.expected_type.from_tree(el)
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
obj = desc.expected_type.from_tree(el)
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
obj = desc.expected_type.from_tree(el)
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/descriptors/serialisable.py", line 103, in from_tree
return cls(**attrib)
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/worksheet/filters.py", line 163, in __init__
self.val = val
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/descriptors/base.py", line 67, in __set__
value = _convert(self.expected_type, value)
File "/Users/desultir/venv/lib/python3.8/site-packages/openpyxl/descriptors/base.py", line 57, in _convert
raise TypeError('expected ' + str(expected_type))
TypeError: expected <class 'float'>