I'm trying to open an XLSX file using pyexcel
. But it fails for both get_book
and get_records
with the following error. However if I try to read the same file converted to xls
it does work. I get the files uploaded by users: so can not restrict uploading files in XLSX format.
>>> import pyexcel
>>> workbook = pyexcel.get_book(file_name='Sample_Employee_data_xls.xlsx')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/me/env/lib/python3.10/site-packages/pyexcel/core.py", line 47, in get_book
book_stream = sources.get_book_stream(**keywords)
File "/home/me/env/lib/python3.10/site-packages/pyexcel/internal/core.py", line 38, in get_book_stream
sheets = a_source.get_data()
File "/home/me/env/lib/python3.10/site-packages/pyexcel/plugins/sources/file_input.py", line 38, in get_data
sheets = self.__parser.parse_file(self.__file_name, **self._keywords)
File "/home/me/env/lib/python3.10/site-packages/pyexcel/plugins/parsers/excel.py", line 19, in parse_file
return self._parse_any(file_name, **keywords)
File "/home/me/env/lib/python3.10/site-packages/pyexcel/plugins/parsers/excel.py", line 40, in _parse_any
sheets = get_data(anything, file_type=file_type, **keywords)
File "/home/me/env/lib/python3.10/site-packages/pyexcel_io/io.py", line 86, in get_data
data, _ = _get_data(
File "/home/me/env/lib/python3.10/site-packages/pyexcel_io/io.py", line 105, in _get_data
return load_data(**keywords)
File "/home/me/env/lib/python3.10/site-packages/pyexcel_io/io.py", line 205, in load_data
result = reader.read_all()
File "/home/me/env/lib/python3.10/site-packages/pyexcel_io/reader.py", line 95, in read_all
content_dict = self.read_sheet_by_index(sheet_index)
File "/home/me/env/lib/python3.10/site-packages/pyexcel_io/reader.py", line 84, in read_sheet_by_index
sheet_reader = self.reader.read_sheet(sheet_index)
File "/home/me/env/lib/python3.10/site-packages/pyexcel_xlsx/xlsxr.py", line 148, in read_sheet
sheet = SlowSheet(native_sheet, **self.keywords)
File "/home/me/env/lib/python3.10/site-packages/pyexcel_xlsx/xlsxr.py", line 72, in __init__
for ranges in sheet.merged_cells.ranges[:]:
TypeError: 'set' object is not subscriptable
>>> workbook = pyexcel.get_book(file_name='Sample_Employee_data_xls.xls') # working
Here is my requirements file.
asgiref==3.6.0
asttokens==2.2.1
autopep8==2.0.1
backcall==0.2.0
certifi==2022.12.7
chardet==5.1.0
charset-normalizer==2.1.1
decorator==5.1.1
Django==3.2.16
django-cors-headers==3.13.0
django-filter==22.1
djangorestframework==3.13.1
et-xmlfile==1.1.0
executing==1.2.0
idna==3.4
ipython==8.8.0
jedi==0.18.2
lml==0.1.0
matplotlib-inline==0.1.6
openpyxl==3.1.0
parso==0.8.3
pexpect==4.8.0
pickleshare==0.7.5
prompt-toolkit==3.0.36
ptyprocess==0.7.0
pure-eval==0.2.2
pycodestyle==2.10.0
pyexcel==0.7.0
pyexcel-io==0.6.6
pyexcel-xls==0.7.0
pyexcel-xlsx==0.6.0
Pygments==2.14.0
pytz==2022.7
requests==2.28.1
six==1.16.0
sqlparse==0.4.3
stack-data==0.6.2
texttable==1.6.7
tomli==2.0.1
traitlets==5.8.1
urllib3==1.26.13
wcwidth==0.2.5
xlrd==2.0.1
xlwt==1.3.0
You can downgrade openpyxl to 3.0.10 for now. I referenced your issue here:
https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1960
Pyexcel uses openpyxl to open xlsx files. The commands are:
pip uninstall openpyxl
pip install openpyxl==3.0.10